回 帖 发 新 帖 刷新版面

主题:fortran传递double型的一个bug

有以下代码:
program main
  call print_value(0.1)
end program main

subroutine print_value(a)
  double precision::a
  print *, a
end subroutine print_value

执行结果
5.12263046511523399E-315
,可见0.1这个数并没有传递到子程序去。
而如果把 double precision::a 改成 real::a 就可以打印处0.1
或者在主程序中声明double precision::a=0.1 然后把a 传递过去即可

哪位高手解释一下,算不算个bug?

回复列表 (共2个回复)

沙发

一个好的 编译器应该会给出如下信息:

 The type of the actual argument differs from the type of the dummy argument.

板凳

这个说明一点, 常数最好也声明它的精度. 现在我连整数常量都加上精度控制.

我来回复

您尚未登录,请登录后再回复。点此登录或注册