NaN
によって定義が等しくない。あなたが何か違うことをしたいのであれば、自分で比較を定義しなければなりません。あまりにも難しいことではありません。イテレータの方法はあなたのための作業のほとんどを実行します。
fn eq_with_nan_eq(a: f64, b: f64) -> bool {
(a.is_nan() && b.is_nan()) || (a == b)
}
fn vec_compare(va: &[f64], vb: &[f64]) -> bool {
(va.len() == vb.len()) && // zip stops at the shortest
va.iter()
.zip(vb)
.all(|(a,b)| eq_with_nan_eq(*a,*b))
}
fn main() {
use std::f64::NAN;
let a = vec![0f64, 1.0, NAN];
let b = vec![0f64, 2.0, NAN];
let c = vec![0f64, 1.0, NAN, 4.0];
let d = vec![0f64, 1.0, 3.0];
assert_eq!(vec_compare(&a, &b), false);
assert_eq!(vec_compare(&a, &a), true);
assert_eq!(vec_compare(&a, &d), false);
assert_eq!(vec_compare(&a, &c), false);
}
Playground
のNaN/infファイルがある場合は、結果は何になりたいですか –
[IEEE浮動小数点演算へようこそ](http://floating-point-gui.de/)。 **定義**、 'NaN'!=' NaN'、これはRust特有のものではありません。また、[NaN'値の[* millions *](http://stackoverflow.com/q/19800415/155423)のどちらを同等にしたいですか? – Shepmaster
FYI、['NAN'定数](https://doc.rust-lang.org/std/f64/constant.NAN.html)があります。解析する必要はありません。 – Shepmaster