fab*_*ioM 10 c++ java floating-point
这是IEEE 754标准问题.我不完全理解它背后的机制.
public class Gray {
public static void main(String[] args){
System.out.println( (float) (2000000000) == (float) (2000000000 + 50));
}
}
Run Code Online (Sandbox Code Playgroud)
In *_*ico 29
因为a float只能容纳7到8位有效数字.也就是说,它没有足够的位来准确表示数字2000000050,所以它被舍入到2000000000.
具体来说,一个float由三部分组成:
您可以将浮点视为计算机进行科学记数法的方式,而不是二进制.
的精度等于log(2 ^ number of significand bits).这意味着一个float可以保持log(2 ^ 24) = 7.225有效数字.
该数字2,000,000,050有9位有效数字.上面的计算告诉我们24位有效数字不能保存那么多有效数字.之所以2,000,000,000是因为只有1个有效数字,所以它适用于有效数字.
要解决这个问题,你可以使用a,double因为它有一个52位有效数字,这足以代表每个可能的32位数字.
| 归档时间: |
|
| 查看次数: |
703 次 |
| 最近记录: |