楼主:
ttjhninn (Cream)
2015-09-14 02:34:34一个double precision的运算式中print出来的值是-119.000000000000
但若取int却print出现-118,这当中出现了什么问题呢?
程式码大约如下:
double precision x,y
.
.
.
.
.
.
.
.
print*,(x-y)*10.0d+00, int((x-y)*10.0d+00)
结果:
-115.000000000000 -115
-116.000000000000 -116
-117.000000000000 -117
-118.000000000000 -118
-119.000000000000 -118
恩...我无言了...= =''
如果要四舍五入请先加 sgn*0.5D0如果你是用gfortran可以用nint,ifort的话不建议使用
作者:
rex0707 (我就是我)
2015-09-14 13:22:00INT 是无条件舍去
作者:
blc (Anemos)
2015-09-14 13:42:00就 -119.00 其实是 -118.9999999~ 我猜x,y值都满大的,相减之后的差值有碰到有效位数的问题。
楼主:
ttjhninn (Cream)
2015-09-14 13:44:00可是print出来的数不会就是他算出来的数字吗?他print出来的数字的确是-119.0000000....啊
作者:
blc (Anemos)
2015-09-14 13:56:00print出来的是会四舍五入的(印象中)
楼主:
ttjhninn (Cream)
2015-09-14 14:02:00那有办法可以看到实际计算出来的直吗?
作者:
rex0707 (我就是我)
2015-09-14 14:04:00格式化输出吧
楼主:
ttjhninn (Cream)
2015-09-14 14:13:00以多加write(17,*)(x-y)*10.0d+00,int((x-y)*10.0d+00)得到的数字仍然是-119.000000000000 -118
作者:
blc (Anemos)
2015-09-14 14:15:00用unformatted写到档案里,然后用hexdump看。问一下,你是用ifort吗?然后xy各是多少?
楼主:
ttjhninn (Cream)
2015-09-14 14:18:00应该是ifor没错
作者:
blc (Anemos)
2015-09-14 14:26:00比较一下unformatted的(x-y)跟119.有没有不一样。或是换gfortran试试会不会有问题。
楼主:
ttjhninn (Cream)
2015-09-14 22:02:00改成int(x*10.0d+00-y*10.0d+00)数字就变-119了,why!?