Re: [問題] Dev-C++ 4992版本
※ 引述《rifiz (薩哈拉雅)》之銘言:
: 標題: [問題] Dev-C++ 4992版本
: 時間: Fri Nov 30 16:46:23 2012
:
: 開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
:
: Dev-C++ 4992版本, C++
:
: 平台是winXP 32bit
:
: 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
: 無
:
: 問題(Question):
:
: 跑下面這段程式:
:
: double x = 1.0;
: int p = 0
: while( x != x + 1)
: {
: x*=2;
: ++p;
:
: printf("PreCheck:%d %lf -- %lf = %lf\n", (x != x + 1), x, x+1 ,x -
: (x+1));
: if ( x == x + 1 ) break;
: printf("\n\n");
: }
: printf("%lf, %d\n",x,p);
:
:
: 預期的正確結果(Expected Output):
:
: 理論上p最後的值是52 但是在DevC++ 上面跑出來是64
:
: 把這段code拿到 codepad上面跑可以得到正確的答案
:
: 請問是怎麼回事呢???
:
: 另外那行印出來檢查的那行, 印出來的x以及x+1的值在52之後 x 跟 x+1的值的確會相等,
:
: 不知道為什麼這個判斷: x != x + 1 , 還是判斷成不相等, 我甚至把bit pattern
:
: 印出來, 的確是一模一樣, memcmp也是return 0, 就是見鬼的還是會output 64....XD
:
: 請各位先進幫忙解惑一下 謝謝
:
:
:
: --
: ※ 發信站: 批踢踢實業坊(ptt.cc)
: ◆ From: 114.43.210.30
: 推 EdisonX:我稍把程式碼改過一下. http://codepad.org/mwULbPil 11/30 18:33
: → EdisonX:這結果在 Code::Blocks(gcc4.4.1)全都是 0,DevC++(3.4.2) 11/30 18:36
: → EdisonX:跑出來e=64, vc e=53, 應和 compiler 處理相關係較大吧? 11/30 18:36
: 推 EdisonX:另一提,我覺得你的測試設計是有問題的, x=1.0, x*=2.0, 11/30 18:39
: → EdisonX:不就很可能直接在 exp 上直接+1, 測不出 mantissa ? 11/30 18:40
: → linotwo:大概是因為判斷式被最佳化了吧。 11/30 18:48
: 推 EdisonX:對了,還要再講一件事,事實上你的程式最後會跑到 ov. 11/30 18:58
: → EdisonX:在 Nan / Inf 情況下, x!=x+1 結果會怎樣, 還是要看編譯器 11/30 19:00
: → rifiz:等等來研究 要出門 XD..先提一下 不會overflow的樣子 就實際 11/30 19:51
: → rifiz:跑的次數 只是在Exponent加上64次..似乎沒有overflow... 11/30 19:52
: 推 LPH66:他就是要測 mantissa 才做 x == x+1 的比較的... 11/30 20:19
: → linotwo:可以試試看改成 !(x == x + 1) 11/30 21:03
最後測試結果是,把DevC++ 的最佳化打開結果反而正確 XD, 也試過樓上提到的一些方法
結果都是仍然是錯誤的, 所以這應該是一個Bug吧??
(用virtualbox裝了FreeBSD8, 此相同程式產生正確答案, 在不用任何最佳化選項下)
請問一下, 若是從compiler角度來看, 有辦法解釋這種錯誤的產生嗎?? 覺得很好奇的是
跑了64次測試迴圈仍然會停止, 若是以expression最佳化錯誤來看, 結果或許應該是
無窮迴圈......吧!? 請熟悉compiler跟浮點數的大大們給個想法吧!!
感謝~~
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.37.147.36
※ 編輯: rifiz 來自: 114.37.147.36 (12/09 05:36)
→
12/09 06:12, , 1F
12/09 06:12, 1F
→
12/09 21:12, , 2F
12/09 21:12, 2F
推
12/10 10:06, , 3F
12/10 10:06, 3F
→
12/10 13:16, , 4F
12/10 13:16, 4F
討論串 (同標題文章)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章