我正在尝试在Fortran中进行一些计算:
large number (order E40) - large number (order E40)
我应该回归零。它大部分时间都有效,但在一些情况下,我会得到奇怪的数字。 Fortran给我的一个答案是-1E20
。我得到的另一个奇怪的答案是32768
,这是2^15
,奇怪的是。
有没有人知道为什么会这样?
答案 0 :(得分:0)
没有实际代码很难分辨,但是......
只有在数字足够相似时才会出现这种情况。虽然与1e20
或1
相比,2
相当大,但与1e40
相比,它相当小。
事实上,即使是双精度,你也只有15-17 digits of precision。考虑到这一点,您获得的值低于1e40
范围内的数字可能的准确度。
你看到的是数字噪音。
[另一种可能性当然是你试图以单精度来做这件事。这是不可能的(最大指数~38),任何事情都可能发生。 ]