为什么数组的元素在乘以1/2或1/3时被格式化为零?

use*_*141 3 arrays io fortran

我正在写出数组的元素如下:

write(6,'(i4,200(1x,e15.7))')Jtot0, (a*PJjv(i,Jtot0,j,iv),i=1,nenerdif,100)
Run Code Online (Sandbox Code Playgroud)

哪里a是常数.但是,当此常量等于1/2或1/3时,输出为零,如果等于1,则每个事物都顺利进行.数组元素是real*8.

我怎么能克服这一点,让我有义务乘以1/3?

Hig*_*ark 7

在Fortran中1/2是一个整数除法运算,在这种情况下,它将向下舍入到0.同样的1/3.如果你想要一个真实的结果,做一个真正的除法运算,比如1.0/2.0.注意,将结果赋值给1/2实变量会将实数变量设置为0.0,即整数除法将导致,0并且接下来发生的赋值将该值转换为其最接近的实数表示.

这种产生整数结果的整数除法业务在编程语言中很常见.