我在一个文件中有一个真实数据的列表。真实数据如下所示。
25.935
25.550
24.274
29.936
23.122
27.360
28.154
24.320
28.613
27.601
29.948
29.367我编写fortran90代码将此数据读入数组,如下所示:
PROGRAM autocorr
implicit none
INTEGER, PARAMETER :: TRUN=4000,TCOR=1800
real,dimension(TRUN) :: angle
real :: temp, temp2, average1, average2
integer :: i, j, p, q, k, count1, t, count2
REAL, DIMENSION(0:TCOR) :: ACF
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
open(100, file="fort.64",status="old")
do k = 1,TRUN
read(100,*) angle(k)
end do然后,当我再次打印以查看这些值时,我会得到
25.934999
25.54999924.27400029.93600123.12200027.36000128.15399924.32000028.61300127.60100029.94800029.36700132.12200233.81800121.83700029.28300126.48900024.01000027.69800030.79999936.15700129.03400034.70000126.05800129.11400024.17700025.20900025.82099926.62000129.761000 我可以知道为什么现在的值是6个小数点吗?如何避免这种影响,使其不影响计算结果?
感谢任何人的帮助。谢谢
发布于 2012-12-11 02:32:55
您不会再次显示用于写出值的语句。因此,我怀疑您已经使用了Fortran的列表定向输出,如下所示
write(output_unit,*) angle(k)如果你这样做了,你已经放弃了程序显示多少位数的控制权给编译器。这就是使用*而不是显式格式的意思,标准说编译器可以使用数字的任何合理表示。
因此,您看到的是以8SF显示的数字,这与单精度浮点数字所提供的内容大致相同。如果你想显示小数点后只有3位的数字,你可以这样写
write(output_unit,'(f8.3)') angle(k)或者它的一些变体。
您已经将angle声明为real类型;除非您使用编译器标志覆盖了默认值,否则这意味着您使用的是单精度IEEE754浮点数(在非特殊计算机上)。还要记住,大多数实数(在数学意义上)没有精确的浮点表示,精确数字25.935的单精度十进制近似很可能是25.934999;您打印的其他数字似乎是程序读取的数字的浮点近似。
如果你真的想以较低的精度计算结果,那么你必须使用一些聪明的编程技术。
https://stackoverflow.com/questions/13773720
复制相似问题