锈图案匹配中的负零

时间:2014-07-09 18:41:58

标签: pattern-matching rust

我正在阅读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,我希望看到-00的特殊情况,例如实现以下情况:

atan2(+0, +0) = +0
atan2(+0, −0) = +π
atan2(−0, +0) = −0
atan2(−0, −0) = −π

我不是说教程应该包含这些示例。毕竟它只是match结构的演示。

我只是想知道0.0是否也匹配-0.0?或者,如果两者被认为是不相交的值?

1 个答案:

答案 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.0match角度来看是一样的。这很自然,只要

fn main() {
    println!("{}", -0.0f64 == 0.0f64);
}

also prints "true"