-4 precision fortran gfortran fortran90 real-datatype
这个问题以前没有回答过.我正试图在Fortran中正确表示真实或任何数字.gfortran为我做的事情远没有.例如,当我声明变量REAL pi = 3.14159 fortran打印pi = 3.14159012而不是说3.14159000.见下文:
PROGRAM Test
IMPLICIT NONE
REAL:: pi = 3.14159
PRINT *, "PI = ",pi
END PROGRAM Test
Run Code Online (Sandbox Code Playgroud)
这打印:
PI = 3.14159012
Run Code Online (Sandbox Code Playgroud)
我可能已经预料到类似PI = 3.14159000的东西,因为REAL应该精确到至少8位小数.
我的心情很好,所以我会尝试回答这个问题,这个基本知识很容易用谷歌搜索(正如在这个和你以前的问题的评论中已经指出的那样).
幸运的是,Fortran提供了一些非常有趣的内在函数来了解浮点数.
您正在谈论的8位数是经验法则,可以与函数相关,该函数EPSILON(x)打印的最小偏差为1,可以在所选模型中表示(例如REAL4).这个值实际上是1.19e-7,这意味着你的第8位数字很可能是错误的.我写的最有可能,因为有些数字可以准确表示.
在这种情况下PI,可以使用内在函数打印最小的可表示偏差SPACING(PI).这显示的值为2.38e-7,略大于epsilon,仍然允许7位正确的数字.
现在,为什么你的PI值存储为3.14159012?存储浮点数时,始终存储最近的可表示数字.使用间距值,我们可以获得pi的可能值.可能的数字及其与您的价值的差异3.14159是:
3.14158988 1.20E-007
3.14159012 -1.18E-007
3.14159036 -3.56E-007
Run Code Online (Sandbox Code Playgroud)
如您所见,3.14159012是最近的可能值,3.14159因此存储和打印.
| 归档时间: |
|
| 查看次数: |
405 次 |
| 最近记录: |