我正在尝试转换一个整数几个小时,让我们说33333333使用内部函数real(int)来实现。我最后得到的只是最近的偶数,有时是33333332或33333334.使用少于8位的整数一切正常。 8位数字开头的一些数字也有效,但是从20000001开始,我得到了错误的真实...
有什么建议吗?
我的系统:ubuntu 14.04 LTS和gcc 4.8.4
答案 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位数。