- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
到目前为止,我有这个。而且我找不到一种方法来处理与 good_enough
的比较。我正在研究计算机程序的结构和解释,我想尽我所能地遵守书中的做法。计划很容易。我知道了。只需要帮助使我的 Rust 代码更通用。
Playground :Rust Playground
use num_traits::cast::FromPrimitive;
use std::cmp::PartialOrd;
use std::ops::{Add, Div, Mul, Sub};
fn square<T: Mul<Output = T> + Copy>(x: T) -> T {
x * x
}
fn average<T: Add<Output = T> + Div<Output = T> + FromPrimitive>(x: T, y: T) -> T {
(x + y) / FromPrimitive::from_usize(2).unwrap()
}
fn abs<T: PartialOrd + Mul<Output = T> + FromPrimitive>(x: T) -> T {
if x < FromPrimitive::from_usize(0).unwrap() {
x * FromPrimitive::from_isize(-1).unwrap()
} else {
x
}
}
fn good_enough<T: Copy + Sub<Output = T> + Mul<Output = T> + FromPrimitive + PartialOrd>(guess: T, x: T) -> bool {
abs(square(guess) - x) < 0.0001
}
fn main() {
println!("Average or {} and {} is {}", 4, 2, average(4, 2));
println!("Square of {} is {}", average(4, 2), square(average(4, 2)));
println!("Absolute Value of {} is {}", -4.5, abs(-4.5));
println!("Test of good_enough: {}",good_enough(3,9));
}
错误:
error[E0308]: mismatched types
--> src/main.rs:22:30
|
21 | fn good_enough<T: Copy + Sub<Output = T> + Mul<Output = T> + FromPrimitive + PartialOrd>(guess: T, x: T) -> bool {
| - this type parameter
22 | abs(square(guess) - x) < 0.0001
| ^^^^^^ expected type parameter `T`, found floating-point number
|
= note: expected type parameter `T`
found type `{float}`
= help: type parameters must be constrained to match other types
= note: for more information, visit https://doc.rust-lang.org/book/ch10-02-traits.html#traits-as-parameters
error: aborting due to previous error
For more information about this error, try `rustc --explain E0308`.
error: could not compile `sqrt`.
为对计算机程序的结构和解释(第 001 章)感兴趣的人完成了 sqrt 项目!
use std::cmp::PartialOrd;
use std::convert::Into;
use std::ops::{Add, Div, Mul, Sub};
use num_traits::cast::FromPrimitive;
fn square<T>(x: T) -> T
where T: Mul<Output=T> + Copy
{
x * x
}
fn average<T>(x: T, y: T) -> T
where T: Add<Output=T> + Div<Output=T> + FromPrimitive
{
(x + y) / FromPrimitive::from_usize(2).unwrap()
}
fn abs<T>(x: T) -> T
where T: PartialOrd + Mul<Output=T> + FromPrimitive
{
if x < FromPrimitive::from_usize(0).unwrap() {
x * FromPrimitive::from_isize(-1).unwrap()
} else {
x
}
}
fn improve<T>(guess: T, x: T) -> T
where T: Add<Output=T> + Div<Output=T> + FromPrimitive + Copy
{
average(guess, x / guess)
}
fn good_enough<T:>(guess: T, x: T) -> bool
where T: Copy + Sub<Output=T> + Mul<Output=T> + FromPrimitive + PartialOrd + Into<f64>
{
let new_guess = guess.into();
let y = x.into();
abs(square(new_guess) - y) <= FromPrimitive::from_f64(0.00000000000001).unwrap()
}
fn sqrt_iter<T>(guess: T, x: T) -> f64
where T: Copy + Add<Output=T> + Div<Output=T> + Mul<Output=T> + Sub<Output=T> + PartialOrd + FromPrimitive + Into<f64>
{
let mut updated_guess = guess.into();
// loop only because I had some stack overflows during testing
let y = x.into();
loop {
if good_enough(updated_guess, y) {
return updated_guess;
} else {
updated_guess = improve(updated_guess, y);
}
}
}
fn my_sqrt<T>(x: T) -> f64
where T: Copy + Add<Output=T> + Div<Output=T> + Mul<Output=T> + Sub<Output=T> + PartialOrd + FromPrimitive + Into<f64>
{
sqrt_iter(FromPrimitive::from_f64(1.0).unwrap(), x)
}
fn main() {
println!("Average or {} and {} is {}", 4, 2, average(4, 2));
println!("Square of {} is {}", average(4, 2), square(average(4, 2)));
println!("Absolute Value of {} is {}", -4.5, abs(-4.5));
println!("Test of good_enough: {}", good_enough(3, 9));
println!("See improve in action guess: {} x:{} outcome:{}", 2, 9, improve(2, 9));
println!("Sqrt of {} is {}", 7921, my_sqrt(7921));
}
输出:
Average or 4 and 2 is 3
Square of 3 is 9
Absolute Value of -4.5 is 4.5
Test of good_enough: true
See improve in action guess: 2 x:9 outcome:3
Sqrt of 7921 is 89
完成的 Playground :Final Playground!
最佳答案
fn good_enough<T: Copy + Sub<Output = T> + Mul<Output = T> + FromPrimitive + PartialOrd>(guess: T, x: T) -> bool {
abs(square(guess) - x) < FromPrimitive::from_f64(0.0001).unwrap()
}
你需要转换0.0001
至 T
因为T
只实现 PartialOrd
.
或者你可以制作T: PartialOrd<f64>
但它会使函数无法接受整数类型。
关于rust - Rust 中带有整数和 float 的泛型函数的问题。在 Rust 中研究计算机程序的结构和解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63625004/
我即将在 uni 开始关于 OpenCL 的荣誉项目,以及如何使用它来改进现代游戏开发。我知道现在/很快有几本书关于学习 opencl,但我想知道是否有人知道关于 opencl 的任何好论文。 我一直
在 Web 开发领域,我听过很多博客,人们说用户倾向于忽略(或被激怒)华而不实/不必要的动画内容,对可用性产生不利影响,但是否有任何研究支持那个声明? 最佳答案 我找到了一对似乎符合您正在寻找的路线。
我对网络语音和音频不熟悉。 我一直在谷歌上搜索示例和解决方案来实现 p2p 语音连接(这个想法是音频 session )。 我发现 google talk xmpp 框架可以访问用户和文本聊天等信息。
我打算创建一个优化的数据结构来保存汇编代码。这样我就可以完全负责将在这个结构上工作的优化算法。如果我可以边运行边编译。这将是一种动态执行。这可能吗?有没有人见过这样的事情? 我应该使用结构将结构链接到
低代码开发平台 Mendix 最新发布的一份研究报告表明,疫情在全球范围内的扩散大大加速了对企业低代码的兴趣和使用。该报告基于来自美国、中国、英国、德国、比利时和荷兰的 1209 名 IT 专业人士
最常用的数值类型是int,但是它未必是最佳选择。bigint,smallint,tinyint可以应用在特殊场合。他们的特性如下表所示: Data type
我试图了解在使用 R 包 kernlab 中的命令 ksvm 时 SVM 预测函数是如何工作的。 我尝试使用以下命令查看预测函数: methods(class="ksvm") getAnywhere(
据我了解,XMPP 协议(protocol)基于始终在线的连接,您无法立即指示 XML 消息何时结束。 这意味着您必须在流来时对其进行评估。这也意味着,您可能必须处理异步连接,因为套接字可能会阻塞在
两天后,我发现自己正在考虑通过网站上的 ajax 请求实现流程自动化。我想做的是研究网站上执行的某些操作的一些请求,并用 javascript 复制它。例如,当我在剧院选择一些座位时,我有这个 POS
当我研究我没有编写的复杂 Java 代码时,我会定期在记事本中写下一些我对给定问题感兴趣的资源的调用堆栈。这些资源通常是方法或常量。 这是一个例子: CONSTANT_NAME com.com
我将为 Android 智能手机实现一个蜜 jar 作为我论文的研究。我从来没有使用过android、java和蜜 jar 。这就是我想开始的方式。我想到使用Honeyd的源代码(用C语言编写),Ho
Closed. This question does not meet Stack Overflow guidelines 。它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 Stack Ov
晚上好。 我真的很难理解这个问题,我不确定我是否错过了一些非常愚蠢的东西,但这是我的代码和我的问题。 const question = new Map(); question.set('questio
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 10 年前。 Improve thi
我想知道是否有人有任何关于编译/链接优化的好资源(论文/文章/书籍引用)。 我曾在两家以不同方式执行链接操作的公司工作。 第一公司强制代码采用严格的 DAG 结构,向我解释说使用强制树结构,链接时间非
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 7年前关闭。 Improve thi
我有 4 个文件想用 Python/Pandas 读取,这些文件是: https://github.com/kelsey9649/CS8370Group/tree/master/TaFengDataS
我正在尝试查找任何分析 Qt 和 Qt Creator 最新版本的研究/学术/期刊论文/文章。 具体来说,我试图从实时安全关键的角度评估 Qt,所以任何信息都是有帮助的。 附言我尝试了典型的搜索方法:
在 Main Wrapper 中,我有 5 个 Div。第一个 div 包含 4 个 Box(box_1, box_2,box_3,box_4),我的点击事件将在其中发生。 另外4个div在main
所以,我一直在用 Netbeans C++ 调试一个程序,我需要仔细查看 vector 的内容,以帮助我找出哪里出了问题。因此,我进入“变量”选项卡进行挖掘。问题是,Netbeans(或我使用过的任何
我是一名优秀的程序员,十分优秀!