【发布时间】:2018-07-09 18:59:26
【问题描述】:
如果您在文件(而不是模块)中有一个独立的函数,并且您使用单精度调用它,而它需要一个双精度数:
main.f90:
program main
call test(1.0)
end program main
test.f90:
subroutine test(a)
double precision :: a
print *, "a", a
end subroutine
在这种情况下,编译器如何将单精度“转换”为双精度? 使用浮点格式,我希望这些位在强制转换期间保持不变,但要附加额外的零。那就是:
1 = 0 01111111 00000000000000000000000 in single-precision
我希望最终值为 2^(-7):
0 01111111000 0000000000000000000000000000000000000000000000000000 in double precision
令人惊讶的是,使用 gfortran 6.4.0,最终值为 5.2635442471208903E-315。
【问题讨论】:
标签: floating-point fortran gfortran