如果在文件中(而不是在模块中)有一个独立的函数,并且使用单精度调用它,而它需要一个双精度的数字:
main.f90:
program main
call test(1.0)
end program maintest.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。
发布于 2018-07-09 19:13:08
我猜编译器是根据endianess进行“强制转换”的。如果你把零放在左边,你会得到:
0 00000000000 0000000000000000000000111111100000000000000000000000它是5.2635442471208903E-315。您可以在编译时强制进行检查。
https://stackoverflow.com/questions/51252364
复制相似问题