[問題] 請問0.0 和-0.0
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
VC++
問題(Question):
一樣的程式碼 同一個exe 在不同電腦 有可能CPU會自動把-0.0 轉成 0.0嗎?
餵入的資料(Input):
輸入數值為 0
預期的正確結果(Expected Output):
-0.0 (我的電腦)
錯誤結果(Wrong Output):
0.0 (客戶的電腦)
程式碼(Code):(請善用置底文網頁, 記得排版)
double b;
file >> b;
float a = -(float) b;
printf("%f",a);
CString score;
score.Format("%2.2f",a);
if(score == "0.00")
補充說明(Supplement):
以上是我簡化程式碼後的結果
從出錯的地方 和客戶電腦交叉比對後 才發現問題出在這邊
而這數字是分數 後續會轉成CString 判斷是否 為 "0.00"
我的電腦出來的結果是 -0.00 所以不會進入判斷式
但是客戶的電腦出來的卻是 0.00 所以會進去 造成意料之外的結果
請問版友有人有類似的經驗嗎?
一樣的程式碼 一樣的執行檔 我個人猜測可能只有CPU演算單元之類的差別
還請版友不吝賜教 謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 122.117.112.106
→
11/07 19:37, , 1F
11/07 19:37, 1F
一樣都是release版呢
→
11/07 19:47, , 2F
11/07 19:47, 2F
→
11/07 19:49, , 3F
11/07 19:49, 3F
→
11/07 19:50, , 4F
11/07 19:50, 4F
→
11/07 19:57, , 5F
11/07 19:57, 5F
感謝指點 其實這分數的比對(if score == "0.00")之後的程式
才是我負責的 算是蠻下游的
今天一直往上游追才看到前人留下的程式碼
小弟浮點數的運算是都有採用azureblaze說的那樣
採用 fabs(a - b)<0.000001來做運算的
本來以為浮點數已經強迫轉為字串(CString)
字串"0.00"就是4個字元 這樣應該就沒有浮點數精度的問題了
沒想到還是漏算一著
那請問是否該把 score 轉回 float
fabs(float(score) - 0.0) < 0.0001 做比較呢?
→
11/07 20:00, , 6F
11/07 20:00, 6F
※ 編輯: jokingfish 來自: 122.117.112.106 (11/07 21:26)
→
11/07 22:14, , 7F
11/07 22:14, 7F
→
11/07 22:15, , 8F
11/07 22:15, 8F
→
11/07 22:15, , 9F
11/07 22:15, 9F
→
11/07 22:18, , 10F
11/07 22:18, 10F
→
11/07 22:19, , 11F
11/07 22:19, 11F
→
11/07 22:19, , 12F
11/07 22:19, 12F
→
11/08 02:06, , 13F
11/08 02:06, 13F
→
11/08 02:11, , 14F
11/08 02:11, 14F
→
11/08 02:25, , 15F
11/08 02:25, 15F
→
11/08 05:54, , 16F
11/08 05:54, 16F
→
11/08 05:54, , 17F
11/08 05:54, 17F
推
11/08 09:15, , 18F
11/08 09:15, 18F
討論串 (同標題文章)