cno*_*ova 3 java typecasting-operator
为什么Java 的输出System.out.println((long)Math.pow(2,63));和 System.out.println((long)(Math.pow(2,63)-1));相同?
输出是相同的,因为double没有足够的位来准确表示2 63.
这为您提供最多17位十进制数字的精度.另一方面,您计算的值是9223372036854775808,因此需要准确表示19位数.结果,2 63的实际表示是9223372036854776000:
表示的尾数1是相同的,而有效值为零的指数是1024,即两个数字的指数相差63,这大于尾数的大小.
当您的数字表示为时,会减1 double.由于minuend的大小远大于减数的大小,因此忽略整个减法运算.
减去更大的数字后,你会得到相同的结果 - 一直到512,即2 9(演示).之后,指数的差异将小于52,因此您将开始得到不同的结果.
| 归档时间: |
|
| 查看次数: |
444 次 |
| 最近记录: |