2015年9月21日 星期一

TCL運算得到錯誤數值

這問題發生原因,可能在於32位元和64位元電腦的處理方式。
假設有這樣運算如下:

  • $param*1000/125000000*($length+12+$frame_gap/8) 

第一個變數假設是10000000,那運算結果會是:
$param*1000 = 10000000*1000 = 10000000000
換算成16進制來看會得到「0x2540BE400」


帶入運算值 > 32位元最大值。這個值都會預設裁切成1410065408,以符合32位元,把這個值再去做後面的運算,得到結果就是2924了。 最後得到完全錯誤結果,因此在數值運算時還是得考慮到這一點。

沒有留言:

張貼留言