首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实数fortran90读取数组

实数fortran90读取数组
EN

Stack Overflow用户
提问于 2012-12-08 10:03:52
回答 1查看 343关注 0票数 0

我在一个文件中有一个真实数据的列表。真实数据如下所示。

代码语言:javascript
复制
 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代码将此数据读入数组,如下所示:

代码语言:javascript
复制
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

代码语言:javascript
复制
25.549999
代码语言:javascript
复制
24.274000
代码语言:javascript
复制
29.936001
代码语言:javascript
复制
23.122000
代码语言:javascript
复制
27.360001
代码语言:javascript
复制
28.153999
代码语言:javascript
复制
24.320000
代码语言:javascript
复制
28.613001
代码语言:javascript
复制
27.601000
代码语言:javascript
复制
29.948000
代码语言:javascript
复制
29.367001
代码语言:javascript
复制
32.122002
代码语言:javascript
复制
33.818001
代码语言:javascript
复制
21.837000
代码语言:javascript
复制
29.283001
代码语言:javascript
复制
26.489000
代码语言:javascript
复制
24.010000
代码语言:javascript
复制
27.698000
代码语言:javascript
复制
30.799999
代码语言:javascript
复制
36.157001
代码语言:javascript
复制
29.034000
代码语言:javascript
复制
34.700001
代码语言:javascript
复制
26.058001
代码语言:javascript
复制
29.114000
代码语言:javascript
复制
24.177000
代码语言:javascript
复制
25.209000
代码语言:javascript
复制
25.820999
代码语言:javascript
复制
26.620001
代码语言:javascript
复制
29.761000    

我可以知道为什么现在的值是6个小数点吗?如何避免这种影响,使其不影响计算结果?

感谢任何人的帮助。谢谢

EN

回答 1

Stack Overflow用户

发布于 2012-12-11 02:32:55

您不会再次显示用于写出值的语句。因此,我怀疑您已经使用了Fortran的列表定向输出,如下所示

代码语言:javascript
复制
write(output_unit,*) angle(k)

如果你这样做了,你已经放弃了程序显示多少位数的控制权给编译器。这就是使用*而不是显式格式的意思,标准说编译器可以使用数字的任何合理表示。

因此,您看到的是以8SF显示的数字,这与单精度浮点数字所提供的内容大致相同。如果你想显示小数点后只有3位的数字,你可以这样写

代码语言:javascript
复制
write(output_unit,'(f8.3)') angle(k)

或者它的一些变体。

您已经将angle声明为real类型;除非您使用编译器标志覆盖了默认值,否则这意味着您使用的是单精度IEEE754浮点数(在非特殊计算机上)。还要记住,大多数实数(在数学意义上)没有精确的浮点表示,精确数字25.935的单精度十进制近似很可能是25.934999;您打印的其他数字似乎是程序读取的数字的浮点近似。

如果你真的想以较低的精度计算结果,那么你必须使用一些聪明的编程技术。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13773720

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档