2014-07-09 37 views
3

我讀上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嗎?或者如果這兩者會被認爲是不相交的值?

回答

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!") 
    } 
} 

當遊戲測試打印運行,因此0.0-0.0match角度來看,同樣的事情「零!」。這是很自然的,只要

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

also prints "true"

+0

這很有道理,使用專門的浮點函數可以更好地完成這些比較。 –