作者:
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!?