首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当使用错误的参数类型调用外部Fortran函数时会发生什么?

当使用错误的参数类型调用外部Fortran函数时会发生什么?
EN

Stack Overflow用户
提问于 2018-07-09 18:59:26
回答 1查看 206关注 0票数 5

如果在文件中(而不是在模块中)有一个独立的函数,并且使用单精度调用它,而它需要一个双精度的数字:

main.f90:

代码语言:javascript
复制
program main

  call test(1.0)
end program main

test.f90:

代码语言:javascript
复制
subroutine test(a)
    double precision :: a
    print *, "a", a
end subroutine

在这种情况下,编译器是如何从单精度“转换”到双精度的呢?使用浮点格式的,我希望比特在强制转换过程中保持不变,但附加零将被追加。这就是:

代码语言:javascript
复制
1 = 0 01111111 00000000000000000000000 in single-precision

我预计最终值是2^(-7):

代码语言:javascript
复制
0 01111111000 0000000000000000000000000000000000000000000000000000 in double precision

令人惊讶的是,在gfortran 6.4.0中,最终值为5.2635442471208903E-315。

EN

回答 1

Stack Overflow用户

发布于 2018-07-09 19:13:08

我猜编译器是根据endianess进行“强制转换”的。如果你把零放在左边,你会得到:

代码语言:javascript
复制
0 00000000000 0000000000000000000000111111100000000000000000000000

它是5.2635442471208903E-315。您可以在编译时强制进行检查。

票数 -3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51252364

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档