Error: Return type mismatch of function 'add' at (1) (REAL(4)/REAL(8))
本帖最后由 sohu 于 2016-4-22 13:21 编辑自己练习的小程序,为啥会出现如题所示错误
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 *
Implicit None 非常重要,建议新手朋友切勿省略。
program main
Implicit None !// 非常重要
real(kind=8)::x=8.0d0 , add !//常数要加 d0,要定义 add
real(kind=8)::y
y=add(1,x)
write(*,*)y
end program main
real(kind=8) function add(I,x)
Implicit None !//非常重要
integer :: i!// 定义
real(kind=8) :: x !//定义
if(I==1) add=x+10.0d0 !//常数要加 d0
end function add 本帖最后由 sohu 于 2016-4-22 21:32 编辑
谢谢版主。
另外想问下:双精度变量赋值一定要加D吗?如果是这样的话,那么单精度变量赋值也要加E?但是书上好像都不加E,只有数值比较大时,为了节省版面,才加E。
还有,书上说单精度浮点数的有效位数是6位,双精度浮点数的位数是15位,这个有效位数如何定义,是从小数点后面开始计算吗? 双精度常量要加 d0,单精度不用。因为编译器,默认都是单精度的。
单精度有效位数在 6 到 7 位之间。双精度大概15位。有效位数的概念,你可以百度一下。初中数学应该学过。
关于浮点数精度的问题,你还可以看视频教程第五期:http://v.fcode.cn/video-variable_type.html 本帖最后由 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位。
bingo
页:
[1]