- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在使用 num::Float
特性并与 Rust 中的原始类型交互时,是否有一种好的方法可以最大限度地减少样板文件的数量?例如,考虑一个写得不好的二次方程求解器
// External libraries
use num::Float;
// Poorly written quadratic formula solver for a x^2 + bx + c
fn myquad <Real> (a : Real, b : Real, c : Real) -> Option<(Real,Real)>
where
Real : Float
{
let mysqrt = Real::sqrt(b.powi(2)-Real::from(4.0)?*a*c);
let r1 = (-b+mysqrt)/(Real::from(2.0)?*a);
let r2 = (-b-mysqrt)/(Real::from(2.0)?*a);
Some((r1,r2))
}
// Write a couple of tests
fn main() {
let r1 = myquad::<f32> (1.0,1.0,-6.0).unwrap();
println!("Roots of (x-2) (x+3): ({},{})",r1.0,r1.1);
let r2 = myquad::<f64> (6.0,5.0,-4.0).unwrap();
println!("Roots of (2x-1) (3x+4): ({},{})",r2.0,r2.1);
}
我希望 myquad
例程适用于 f32
和 f64
以外的各种浮点类型,但也适用于它们出色地。也就是说,有一组重复的 Real::from(x)?
形式的包装器,其中 x 是原始浮点类型。虽然我理解类型一致性的必要性,但这有点冗长,而且我担心这些包装器的可管理性对于具有大量原语的更复杂的例程。有没有更好的方法来处理这些转换或让它们隐式工作?可以肯定的是,答案可能是否定的,但我想在处理更复杂的例程之前了解此成本。
最佳答案
你遇到这个障碍的原因是因为你期待 num::Float
成为一个实现的特征。 不是。它的目的是作为一个extension trait .
f32
都实现了它和 f64
并允许您使用它在这些类型上实现的所有方法,而无需在类型本身中实现它们。
然而,这并不意味着您可以神奇地添加 T: Float
但是,因为您的操作需要乘法和减法,所以一定要摆脱困境。因此,您的常量(正如您自己发现的那样)需要实现 Sub<X>
和 Mul<X>
, 其中X
是您为常量选择的类型。
然而,有一个技巧。如果你知道常量的类型......你可以要求From<X>
(其中 X 是常量的类型)。这意味着您可以在要求 float 大小的下限的情况下轻松解决这个问题。
这个下限要求在您的情况下不是问题,因为您依赖于 powi
在 num::Float
上声明的方法,并且此特征仅针对两种原始类型实现:f32
和 f64
.如果你想使用,比方说,half::f16
, 你需要摆脱对 powi
的调用.因此,需要 f32
因为下限是完全可以接受的。
fn myquad<T:Float + From<f32>>(a : T, b: T, c: T) -> Option<(T, T)>
{
let mysqrt = (b.powi(2) - a * c * (4.0.into())).sqrt();
let r1 = (-b+mysqrt)/(a * 2.0.into());
let r2 = (-b-mysqrt)/(a * 2.0.into());
Some((r1,r2))
}
我认为就样板文件而言,您可以做到这一点。
关于rust - 在 Rust 中使用 `num::Float` 特性并与基本类型交互时如何最小化样板文件的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57813022/
我知道这是基本的,但我不确定,我哪里出错了,之前从未写过正则表达式.. 我需要从命令中获取一些输出 cmd | grep '[0-9]+:[0-9]+:[0-9]+:[0-9]+' 我需要grep一些
这个问题在这里已经有了答案: How does assignment work with list slices? [duplicate] (5 个答案) What does colon at as
我在一本 C 书中读到,对于数组 num[7],术语 num 等同于 &num[0]。这个概念对我来说很好,但是当我编写如下所示的程序时,我再次感到困惑。 #include #include int
例如,一种不好的方法是通过字符串分解: toReadableNum :: (Num a, Num b, Read b) => a -> b toReadableNum = read . show 如果
在输入文本字段中,我必须获取该值并在我的 .ts 文件中使用它。你能建议我应该使用以下哪种语法吗? 最佳答案 如果您希望在文本字段中看到的内容与变量中看到的内容之间进行同步对齐,请使用 如果您想在文
我正在研究 while 循环。我目前正在研究一个问题,要求从名为 a、b 和 c 的用户那里获取三个数字。我尝试显示 a 和 b 之间的所有数字,它们除以 c。我尝试使用“if”的想法,但没有成功。
因为这些符号,我很难用谷歌搜索。 num & 8, num >> 8 和 num >> 8 & 64 在 javascript 中是什么意思? 最佳答案 它们是 bitwise operators 关
显然,我的类型签名已关闭。从那以后我发现了原因。现在,我有兴趣了解更多关于我的错字上的 GHCI 推断签名。我试图让这段代码工作: elemNum :: (Eq a, Num b) => a -> [
我有一个程序根据定义的规则接受特定的字符串,即数字运算符编号。例如:2+4-5*9/8 上面的字符串是可以接受的。现在,当我输入类似 2+4-a 的内容时,它再次显示可接受,这是完全 Not Acce
我读到了这样一个旋转数组的解决方案 问题: public class Solution { public void rotate(int[] nums, int k) { in
一般来说,对于 int num , num++ (或 ++num ),作为读-修改-写操作,是 不是原子的 .但是我经常看到编译器,比如GCC ,为其生成以下代码( try here ): void
这个问题在这里已经有了答案: What's the difference between my ($variableName) and my $variableName in Perl? (4 个回答
如果列表中的 num 大于 0.5,我想得到 1,否则得到 0。 例如,a是一个列表 Matlab: b = (a > 0.5) Python: b = [1 if x > 0.5 else 0 fo
第4行为什么要在“-”后面加上“=”? num = 5 if num > 2: print(num) num -= 1 print(num) 最佳答案 num - 1:产生num减一的
iex> num = [9] '\t' 分配单个 [9] 列表返回 '\t'。这是什么原因? 最佳答案 您可以使用 i helper in IEx有关数据类型的更多信息: iex> i [9] Te
好吧,我做错了什么 - Moose 忽略了我的强制: package moo; use Moose; use Moose::Util::TypeConstraints; subtype Bar =>
这个问题已经有答案了: JavaScript property access: dot notation vs. brackets? (17 个回答) 已关闭 4 年前。 我正在练习编写一些代码。在练
我有声明 SELECT COUNT(*) as num_requests, ip_address FROM requests GROUP BY ip_address ORDER BY num_requ
有什么方法可以在 javascript 中编写更短的 (num>0)?num:0 吗? 原因是 num 变量还没有定义,在上面的例子中需要计算两次。 换句话说,a和b是已知的。我想写 (a>b)?(a
这个问题在这里已经有了答案: Why does 2 == [2] in JavaScript? (9 个回答) 关闭 9 年前。 这些陈述的计算结果为真是否有原因? 0 == [0]; 1 == [
我是一名优秀的程序员,十分优秀!