真实数据类型fortran 90

时间:2014-07-15 22:16:30

标签: types fortran fortran90 real-datatype

一个简单的问题。有一个类似的问题,但我找不到我想要的那个。

我只是检查了fortran 90中的实际数据类型的限制(使用ifort编译器),原因是我的实际代码可能达到了这个限制。为了测试,我简单地给出了一个参数 mval1 (参见代码)并乘以2.在ifort手册中,它表示它可以采用的最大值是10E38,而且我的值远小于此值。但是在打印时,它会随机抽取数字(输出在底部给出)。任何人都可以帮助我完成这个

PROGRAM TEST

  IMPLICIT NONE
  REAL(KIND=8), PARAMETER :: mval1 = 1073E12
  REAL(KIND=8) :: j
  j = real(2*mval1)
  PRINT *, j,mval1

END PROGRAM TEST

输出

 2.146000005234688E+015  1.073000002617344E+015

1 个答案:

答案 0 :(得分:3)

要添加到您已经拥有的评论中的两点。

一:在英特尔Fortran real(kind=8)变量与IEEE-754双精度数相同,最大正值为1.797693134862316E+308。对于单精度IEEE浮点数,英特尔Fortran real(kind=4),最大值为3.4028235E+38,大约为10E38

二:您的声​​明

REAL(KIND=8), PARAMETER :: mval1 = 1073E12

mval1指定默认真实种类的值。我不知道您的默认编译器设置是什么,但检查如果将该行更改为

会发生什么
REAL(KIND=8), PARAMETER :: mval1 = 1073E12_8

明确声明文字是kind=8

你不太明白的问题的答案,以及其他评论中你没有给出的答案是:浮点运算是棘手的,使用它的程序员应该至少熟悉基本技巧。 Wikipedia article on floating-point数字和算术是您自我教育的良好起点。无论其他人告诉你什么都忽略了Goldberg的论文每个计算机科学家应该知道浮点运算,直到你开始尝试实现自己的浮点数和算术。