ksfengjia 发表于 2015-8-19 13:43:39

gfortran中双精度输入输出有误差,求解答

环境:ubantu LTS14.02编译器:gfortran
代码段截取:
    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:18

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:59

楚香饭 发表于 2015-8-19 15:46
0.8408618802e6, 0.3637413208e6,-0.4634506669e6, &
                                             ...

3q,已解决。
看fortran95/2003,以为现在的语法把d这个废止了,直接使用e就可以
页: [1]
查看完整版本: gfortran中双精度输入输出有误差,求解答