Fortran Coder

标题: gfortran中双精度输入输出有误差,求解答 [打印本页]

作者: ksfengjia    时间: 2015-8-19 13:43
标题: gfortran中双精度输入输出有误差,求解答
环境:ubantu LTS14.02编译器:gfortran
代码段截取:
[Fortran] 纯文本查看 复制代码

    real(kind=8),parameter,dimension(0:8) :: CF2 = (/ 0.8408618802e6  , 0.3637413208e6  ,-0.4634506669e6  , &
          &  0.1130306339e6  ,-0.4350217298e3  ,-0.3898988188e4  , & !the second number
    do i = 0,8
          write(*,e17.10) CF2(i)
    end do

输出结果:
.840861875E+006
.363741313E+006
-.463450656E+006
.113030633E+006
-.435021729E+003
-.389898828E+004
.669739929E+003
-.473072624E+002
.126512504E+001
问题描述:
10位有效数字的双精度实数,在write的时候会在第7位有效数字时出错,而双精度有15位的有效数字不应该发生这种错误。
check过gfortran中kind定义,8为双精度值。
疑问:是否是gfortran内存调用实型参数是赋值到了一个单精度的实型内存空间?
            如何改变这种情况,使计算时均为双精度实数。

作者: 楚香饭    时间: 2015-8-19 15:46
0.8408618802e6  , 0.3637413208e6  ,-0.4634506669e6  , &
                                                            &  0.1130306339e6  ,-0.4350217298e3  ,-0.3898988188e4
改为
0.8408618802d6  , 0.3637413208d6  ,-0.4634506669d6  , &
                                                            &  0.1130306339d6  ,-0.4350217298d3  ,-0.3898988188d4
作者: ksfengjia    时间: 2015-8-20 10:08
楚香饭 发表于 2015-8-19 15:46
0.8408618802e6  , 0.3637413208e6  ,-0.4634506669e6  , &
                                             ...

3q,已解决。
看fortran95/2003,以为现在的语法把d这个废止了,直接使用e就可以




欢迎光临 Fortran Coder (http://bbs.fcode.cn/) Powered by Discuz! X3.2