fo_*_*x86 0 java double ieee-754
我该如何解释如下:
double o = 2.3;
int i = (int) (o * 100000.0);
double d = i / 100000.0;
System.out.println(d);
Run Code Online (Sandbox Code Playgroud)
打印2.29999
double o = 2.3;
double i = o * 100000.0;
double d = i / 100000.0;
System.out.println(d);
Run Code Online (Sandbox Code Playgroud)
打印2.3
将int除以double时,java首先将int转换为double,然后进行除法 - 如果是这样,两个代码块应该有效地打印相同的值?
似乎有一些我缺少的IEEE 754浮点精度规范和/或内联的jvm优化
double i = 2.3 * 100000.0;
double d = i / 100000.0;
Run Code Online (Sandbox Code Playgroud)
as double d = 2.3*100000.0/100000.0; 有效地取消了分裂并使其成为无操作.
思考?
Eri*_*hil 10
2.3在IEEE-754 64位二进制浮点中不能完全表示.您的第一个代码序列中发生的事情是:
2.3将转换为最接近的可表示值,2.29999999999999982236431605997495353221893310546875.int,转换会截断,产生229999.| 归档时间: |
|
| 查看次数: |
6556 次 |
| 最近记录: |