我正在阅读rust-lang.org上的Rust tutorial,我看到了以下代码:
use std::f64;
fn angle(vector: (f64, f64)) -> f64 {
let pi = f64::consts::PI;
match vector {
(0.0, y) if y < 0.0 => 1.5 * pi,
(0.0, _) => 0.5 * pi,
(x, y) => (y / x).atan()
}
}
通常对于atan2
,我希望看到-0
和0
的特殊情况,例如实现以下情况:
atan2(+0, +0) = +0
atan2(+0, −0) = +π
atan2(−0, +0) = −0
atan2(−0, −0) = −π
我不是说教程应该包含这些示例。毕竟它只是match
结构的演示。
我只是想知道0.0
是否也匹配-0.0
?或者,如果两者被认为是不相交的值?
答案 0 :(得分:4)
好吧,你可以试试吧!以下是playtest的链接:http://is.gd/NiS0gF
显然,0.0
匹配-0.0
。这段代码:
fn main() {
let x = -0.0f64;
match x {
0.0f64 => println!("Zero!"),
_ => println!("Something else!")
}
}
在playtest打印&#34; Zero!&#34;时,0.0
和-0.0
从match
角度来看是一样的。这很自然,只要
fn main() {
println!("{}", -0.0f64 == 0.0f64);
}