rust 为什么直接使用表达式与在使用f32的闭包中使用表达式存在数值差异?[duplicate]

rn0zuynd  于 2022-12-13  发布在  其他
关注(0)|答案(1)|浏览(130)

此问题在此处已有答案

Is floating point math broken?(31个答案)
What's the default floating point type?(1个答案)
12小时前关门了。
此代码:

let average = |a: f32, b: f32, c: f32| {
    (a + b + c) / 3.0
};

println!("With function: {}", average(11.0, -22.0, 33.0));
println!("Without function: {}", (11.0 - 22.0 + 33.0) / 3.0);

打印此结果:

With function: 7.3333335
Without function: 7.333333333333333

它们为什么不同?

y3bcpkx1

y3bcpkx11#

这种差异来自于使用不同的类型来计算同一个数学表达式。闭包使用f32 s(如注解的那样),而没有它的版本使用f64 s。带小数的数字文字的类型默认为f64,除非另有推断或后缀。
如果闭包被标注为f64 s,你会得到同样的结果:
第一个

相关问题