Fortran 95:从偶数实数转换为8位整数到实数

时间:2016-08-25 10:02:00

标签: integer fortran

我正在尝试转换一个整数几个小时,让我们说33333333使用内部函数real(int)来实现。我最后得到的只是最近的偶数,有时是33333332或33333334.使用少于8位的整数一切正常。 8位数字开头的一些数字也有效,但是从20000001开始,我得到了错误的真实...

有什么建议吗?

我的系统:ubuntu 14.04 LTS和gcc 4.8.4

1 个答案:

答案 0 :(得分:1)

这个简单的程序显示了在转换过程中使用单个与双倍的区别:

program compare
    implicit none

    real*8 :: real_8_v
    real*4 :: real_4_v
    integer :: integer_v

    integer_v = 33333333
    real_4_v = real(integer_v, 4)
    real_8_v = real(integer_v, 8)

    write(*, '(E15.8)') real_4_v
    write(*, '(E15.8)') real_8_v
end program compare

结果将是:

  

0.33333332E + 08< =单精度

     

0.33333333E + 08< =双精度

在IEEE754中,它决定了这一点,"精度"单精度数字(32位)最多只能达到7位数。处理双精度数字(64位)时,它最多可达15位数。