执行此代码(Playground):
println!("u128 max: {}", u128::max_value());
println!("f32 max: {}", std::f32::MAX);
println!("f32 as u128: {}", std::f32::MAX as u128);
...打印:
u128 max: 340282366920938463463374607431768211455
f32 max: 340282350000000000000000000000000000000
f32 as u128: 340282346638528859811704183484516925440
从这个输出来看,我们可以推断,u128::max_value() > f32::MAX
和f32::MAX
是一个整数(无小数部分)。事实上,Wikipedia agrees用的最高值,并说f32::MAX
是(2 - 2-23)×2127这是略小于2128鉴于这种情况,我会认为f32::MAX
是u128
精确表示。但正如你所看到的,通过as
铸造它提供了一个完全不同的价值。
为什么投的结果从原来的值不同?
(我知道花车是非常奇怪的野兽和一切,但我希望有一个回答这个问题包含除“花车奇怪咄”的更多信息)
这是因为当你打印出来浮动的格式。这似乎默认打印花车当格式将只显示8个显著数字。明确指定的精度格式字符串将产生用于线路2和3相同的结果。
println!("u128 max: {}", u128::max_value());
println!("f32 max: {:.0}", std::f32::MAX);
println!("f32 as u128: {}", std::f32::MAX as u128);
输出:
u128 max: 340282366920938463463374607431768211455
f32 max: 340282346638528859811704183484516925440
f32 as u128: 340282346638528859811704183484516925440