为什么直接使用表达式与在闭包中使用f32有数值差异?



代码:

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

为什么它们不同?

差异来自于使用不同的类型来计算相同的数学表达式。闭包使用f32s(如注释所示),而没有它的版本使用f64s。带有小数的数字字面值的类型默认为f64,除非推断或附加后缀。

所以后者的精度是前者的两倍。如果用f64s来注释闭包,您将得到相同的结果:

let average = |a: f64, b: f64, c: f64| {
(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.333333333333333
Without function: 7.333333333333333

相关内容

  • 没有找到相关文章

最新更新