执行此代码(Playground):
println!("u128 max: {}", u128::max_value());
println!("f32 max: {}", std::f32::MAX);
println!("f32 as u128: {}", std::f32::MAX as u128);
Run Code Online (Sandbox Code Playgroud)
...打印:
u128 max: 340282366920938463463374607431768211455
f32 max: 340282350000000000000000000000000000000
f32 as u128: 340282346638528859811704183484516925440
Run Code Online (Sandbox Code Playgroud)
从这个输出来看,我们可以推断出u128::max_value() > f32::MAX那f32::MAX是一个整数(没有小数部分).实际上,维基百科同意最大值,并说它f32::MAX是(2 - 2 -23)×2 127,略小于2 128.鉴于此,我认为这f32::MAX完全可以表示为u128.但是正如你所看到的,通过as它投射它会产生完全不同的价值.
为什么演员表的结果与原始值不同?
(我知道漂浮物是非常奇怪的野兽和所有.但我希望这个问题有一个答案,其中包含的信息比"漂浮物很奇怪"还要多)
Mar*_*cus 11
这是由于打印时浮动的格式.默认情况下,格式化程序在打印浮动时仅显示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);
Run Code Online (Sandbox Code Playgroud)
输出:
u128 max: 340282366920938463463374607431768211455
f32 max: 340282346638528859811704183484516925440
f32 as u128: 340282346638528859811704183484516925440
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
141 次 |
| 最近记录: |