推 yvb: 你還沒 printf 前就都轉成整數了不是嗎? 02/22 18:03
→ yvb: 另外實測 32-bit -O0 兩個尾數都會是 49 . 02/22 18:03
→ yvb: 但是 32-bit -O1 或 64-bit 的結果, 尾數就是 50 和 49. 02/22 18:06
→ nh60211as: 兩個數字都無法完整用double來表示 02/22 19:58
→ nh60211as: 另外浮點數運算在不同的架構、編譯器、編譯選項都可能 02/22 19:58
→ nh60211as: 有不同的結果 02/22 19:58
→ nh60211as: 可以參考上面都是GCC開不同編譯選項,實際產生的code 02/22 19:59
→ nh60211as: 完全不一樣 02/22 19:59
→ tstanly: 謝謝。從assembly code看起來 326049是compiler先算的(爲 02/23 16:39
→ tstanly: 了optimization)。只是不懂爲什麼它這樣算了。 02/23 16:39
→ nh60211as: 因為你的程式碼只有可能產生一種輸出,如果你把這段邏 02/23 17:38
→ nh60211as: 輯寫成一個function的話那編譯器就不可能先把輸出寫到 02/23 17:38
→ nh60211as: 程式裡面了 02/23 17:38
推 LPH66: 之所以這裡會有這種差就是取整時是截斷取整而非最接近取整 02/24 18:27
→ LPH66: 那這一點如上所述跟不同架構不同編譯器不同編譯選項都有關 02/24 18:27
推 hellophoenix: 用double d=3.326950000000000l看看 03/08 23:10
→ hellophoenix: 感覺宣告d的時候是把0.32605的float給了d所以造成 03/08 23:12
→ hellophoenix: 精度損失 03/08 23:12
→ yvb: 樓上請看一下五樓和六樓的圖片吧. 03/08 23:44