此问题在此处已有答案:
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
它们为什么不同?
1条答案
按热度按时间y3bcpkx11#
这种差异来自于使用不同的类型来计算同一个数学表达式。闭包使用
f32
s(如注解的那样),而没有它的版本使用f64
s。带小数的数字文字的类型默认为f64
,除非另有推断或后缀。如果闭包被标注为
f64
s,你会得到同样的结果:第一个