Fortran 添加大数字会返回奇怪的大数字

Fortran 添加大数字会返回奇怪的大数字,fortran,fortran90,addition,largenumber,Fortran,Fortran90,Addition,Largenumber,我试图用Fortran语言进行一些计算,如下所示: large number (order E40) - large number (order E40) 我应该回到原点。大多数情况下,它是有效的,但在一些情况下,我会得到奇怪的数字。Fortran给我的一个答案是-1E20。我得到的另一个奇怪的答案是32768,也就是2^15,这很奇怪 有人知道为什么会这样吗 没有实际的代码很难判断,但是 只有在数字足够相似的情况下,这才是意料之中的。虽然与1或2相比,1e20相当大,但与1e40相比,它相当

我试图用Fortran语言进行一些计算,如下所示:

large number (order E40) - large number (order E40)
我应该回到原点。大多数情况下,它是有效的,但在一些情况下,我会得到奇怪的数字。Fortran给我的一个答案是
-1E20
。我得到的另一个奇怪的答案是
32768
,也就是
2^15
,这很奇怪


有人知道为什么会这样吗

没有实际的代码很难判断,但是

只有在数字足够相似的情况下,这才是意料之中的。虽然与
1
2
相比,
1e20
相当大,但与
1e40
相比,它相当小

事实上,即使使用双精度,您也只有。考虑到这一点,您得到的值低于
1e40
范围内数字可能达到的精度

你看到的是数字噪音



[当然,另一种可能性是,您试图以单精度执行此操作。这是不可能的(最大指数~38),任何情况都可能发生。]

您必须显示代码,并显示您为哪个输入设置的结果以及您想要的输入。别忘了显示变量的定义。你是指加法(如标题所示)还是减法(如伪代码所示)?对。对不起,我应该把我的问题表达得更好一点——我有两个非常大的数字需要减去。当我用手做减法时,答案是零。然而,Fortran给出的数字肯定不是零——甚至不接近。我意识到这是一个精确的问题。我所有的变量目前都是双精度的,我想知道是否有办法提高精度。在网上浏览之后,我尝试了real*16和real*10,但这两种方法都不管用。那么,你应该编辑这个问题。也许你应该花点时间阅读。。。改进该问题可能会删除否决票和接近票。