LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 750|回复: 4

[已解决]gfortran常数问题

[复制链接]
发表于 2009-3-30 21:02:40 | 显示全部楼层 |阅读模式
一段fortran 代码:


  1. program exam
  2. implicit none
  3. real*8,parameter::pi=3.1415926
  4. write(*,*) pi
  5. end
复制代码

编译完了,给个结果是3.1415925025939941,怎么回事?在win下用visual fortran 6.5  编译结果是正确的。
发表于 2009-3-31 05:47:37 | 显示全部楼层
你用fortran 77试试看,也一样的。
  1.        program exam
  2.        parameter (pi=3.1415926)
  3.        write(*,*)pi
  4.        end
复制代码
  1. program exam
  2. implicit none
  3. real,parameter :: pi=3.1415926
  4. write(*,*) pi
  5. end
复制代码
两段代码的结果都是 3.1415925。上面的是77,下面的是90。
我测试了一下,不知道下面的结果是不是能让lz满意:
  1. program exam
  2. implicit none
  3. real*8,parameter :: pi=3.1415926d0
  4. write(*,*) pi
  5. end
复制代码
输出
  1. 3.1415926000000001
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-3-31 08:15:56 | 显示全部楼层
又装了intel fortran,编译结果也是3.1415925。我用的是Debian,不知道在其他linux版本下结果如何,在win下结果是3.1415926。想搞清楚究竟是什么原因造成的。
回复 支持 反对

使用道具 举报

发表于 2009-3-31 09:30:58 | 显示全部楼层
real*8的:
program exam
implicit none
real*8,parameter :: pi=3.1415926D0
write(*,*) pi
end
intel的编译器和gfortran都能正确输出

real*16的,仅限intel编译器 for linux 支持
program exam
implicit none
real*16,parameter :: pi=3.1415926Q0
write(*,*) pi
end
也能正确输出

常数赋值的时候需要给编译器说明这个数的精度



Post by bian222;1967807
又装了intel fortran,编译结果也是3.1415925。我用的是Debian,不知道在其他linux版本下结果如何,在win下结果是3.1415926。想搞清楚究竟是什么原因造成的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-3-31 11:22:51 | 显示全部楼层
明白了,谢谢两位。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表