線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1362
推到 Plurk!
推到 Facebook!

兩浮點數相除後判斷結果異常

答題得分者是:herbert2
shyu_ting
一般會員


發表:13
回覆:25
積分:12
註冊:2002-11-04

發送簡訊給我
#1 引用回覆 回覆 發表時間:2013-01-15 15:28:57 IP:211.72.xxx.xxx 訂閱
 各位先進:
var a,b :currency;
a:=0.017;
b:=0.01;
if a/b >= 1.7 then 'Y' else 'N'

我在不同的兩部pc執行,結果居然不同,是pc
有哪裡需要設定嗎?
版本:delphi 6.0

herbert2
尊榮會員


發表:58
回覆:640
積分:894
註冊:2004-04-16

發送簡訊給我
#2 引用回覆 回覆 發表時間:2013-01-15 23:53:55 IP:202.39.xxx.xxx 訂閱
我猜,兩部 PC 可能 CPU 不同,甚至或是 Windows 版本也不同。
符點運算在第一批 Pentium CPU 曾鬧出個大漏子,符點運算至小數點後十幾位(記不得了)時,會發生錯誤結果,
導致 CPU 回收做成耳環墜子等。
因此,建議改一下程式再試試看:

var a,b,c :currency;
a:=0.017;
b:=0.01;
c:=a/b; // 先存入變數, 以防止 a/b 線上運算會有小數位的誤差, 例如: 1.69999999999 或 1.700000000001
if c >= 1.7 then 'Y' else 'N'
系統時間:2024-11-21 20:23:20
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!