两个精确表示的双精度数的乘积。准确吗?

问题描述 投票:0回答:1

假设我们在 Java 中有两个 double:

double a, b; // a and b are any decimals that have exact representation in IEEE-754

是否保证

a * b
a / b
返回准确的结果,并且在不超过
+/- INF
的情况下具有精确的双精度表示?

java floating-point
1个回答
0
投票

不。 想象两个满足要求的数字

a
b
。这意味着
a op b
是准确的。 现在继续如下过程。

double a = 1.5; // exact
double b = 1.5; // exact

for (int i = 0; i < 16; i++) {
    System.out.println(a);
    a *= b; // a is presumed to be exact each time based on assumption
}

打印

1.5
2.25
3.375
5.0625
7.59375
11.390625
17.0859375
25.62890625
38.443359375
57.6650390625
86.49755859375
129.746337890625
194.6195068359375
291.92926025390625
437.8938903808594
656.8408355712891

最终,由于有效数空间有限,

q op b
将失去精度。 结果不以
5
结尾即可证明。

© www.soinside.com 2019 - 2024. All rights reserved.