Fortran Coder

查看: 18515|回复: 5
打印 上一主题 下一主题

[数值问题] Error: Return type mismatch of function 'add' at (1) (REAL(4)/REAL(8))

[复制链接]

18

帖子

8

主题

0

精华

入门

F 币
83 元
贡献
47 点
跳转到指定楼层
楼主
发表于 2016-4-22 09:17:56 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 sohu 于 2016-4-22 13:21 编辑

自己练习的小程序,为啥会出现如题所示错误

[Fortran] 纯文本查看 复制代码
program main
  real*8::x=8.0
  real*8::y
  y=add(1,x)
  write(*,*)y
  stop
end

real*8 function add(I,x)
    implicit real*8(a-h,o-z)
    implicit integer(i-k,l,m-n)
    if(I==1) add=x+10.0
    return
end


错误信息:
  y=add(1,x)
       1
Error: Return type mismatch of function 'add' at (1) (REAL(4)/REAL(8))
Error(E42): Last command making (build\test2.o) returned a bad status
Error(E02): Make execution terminated

* Failed *


分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

18

帖子

8

主题

0

精华

入门

F 币
83 元
贡献
47 点
沙发
 楼主| 发表于 2016-4-22 21:06:11 | 显示全部楼层
本帖最后由 sohu 于 2016-4-22 21:32 编辑

谢谢版主。
另外想问下:双精度变量赋值一定要加D吗?如果是这样的话,那么单精度变量赋值也要加E?但是书上好像都不加E,只有数值比较大时,为了节省版面,才加E。
还有,书上说单精度浮点数的有效位数是6位,双精度浮点数的位数是15位,这个有效位数如何定义,是从小数点后面开始计算吗?

18

帖子

8

主题

0

精华

入门

F 币
83 元
贡献
47 点
板凳
 楼主| 发表于 2016-4-23 13:12:49 | 显示全部楼层
本帖最后由 sohu 于 2016-4-23 13:14 编辑

谢谢版主,看过视频,又查了下别的资料,总结下。

有效位:指的是从第一个不是零的数值开始向后数起,有多少位就有多少个有效位数。如001.100 有效位数是4位
单精度,4个字节,32位,包括1个符号位+8个指数位+23个二进制有效位 ,那么23位二进制有效位转换成10进制的有效位,2^23=10^x,得x=6.923
双精度,8个字节,64位,包括1个符号位+11个指数位+52个二进制有效位,那么52位二进制有效位转换成10进制的有效位,2^52=10^x,得x=15.35
所以书上说单精度有效位为6~7位,双精度有效位15~16位。


您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-5-17 18:14

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表