[问题] int计算错误

楼主: 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
恩...我无言了...= =''
作者: onezillion (宝贝)   2015-09-14 09:56:00
int只取整数部分,无视小数点进位?
作者: kerwinhui (kezza)   2015-09-14 10:58:00
如果要四舍五入请先加 sgn*0.5D0如果你是用gfortran可以用nint,ifort的话不建议使用
作者: rex0707 (我就是我)   2015-09-14 13:22:00
INT 是无条件舍去
作者: 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:00
print出来的是会四舍五入的(印象中)
楼主: 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!?

Links booklink

Contact Us: admin [ a t ] ucptt.com