[問題] 如何直接判斷浮點數運算時的誤差?(贈P幣)

看板Prob_Solve (計算數學 Problem Solving)作者 (寶寶)時間5年前 (2018/11/29 08:15), 5年前編輯推噓3(303)
留言6則, 2人參與, 5年前最新討論串1/1
  為了這個問題困擾了許久,不斷地查資料,查完這個觀念,又看到新的名詞與此題 有關聯。以我查到的資料VB.Net在浮點數運算時會將數字以IEEE754來標準來做,預設的 浮點數型態是Double,所以是64位,有誤差是因為將他轉成2進制,小數部分如果無限 循環,取到53位往最靠近的捨入(Round to nearest),二進制的這個模式我不太懂, 翻資料查到的大概又都是英文...。   還有一些環境的因素,我看到一個文件上面說編譯器可能會幫你最佳化運算式, 例如說x = a+b-a -> x = b,那這題有很多環境的問題,我要如何判斷呢? (出處:https://goo.gl/oAzyNB Compiler Optimization)   如果判斷此題需要手算,請問有無快速手算判斷的方法?此題是今年高職技藝競 賽的程式設計賽前模擬學科試題,有想過他可能只是出經典範例來考你知不知道浮點 數有誤差,如果只是這樣就太好了,但是以防萬一還是有個準確判斷的方法比較安心。 ----更新---- 沒什麼人解答,如果能解決問題者,贈上全部家產稅前350P 下面圖兩題答案分別為C、D https://imgur.com/a/zBQ9pjH 22. 執行下列 Visual Basic 程式片段,輸出結果為何? (A) 1 (B) 0 (C) True (D) False Console.WriteLine(1.1 + 1.2 = 2.3) 23. 執行下列 Visual Basic 程式片段,輸出結果為何? (A) 1 (B) 0 (C) True (D) False Console.WriteLine(0.3 - 0.2 = 0.1) -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 163.19.240.54 ※ 文章網址: https://www.ptt.cc/bbs/Prob_Solve/M.1543450501.A.83F.html ※ 編輯: baobao566 (163.19.240.54), 11/30/2018 07:51:22 ※ 編輯: baobao566 (163.19.240.54), 11/30/2018 07:51:49

11/30 16:31, 5年前 , 1F
所以原 PO 有按照 IEEE 標準先跑過一遍嗎
11/30 16:31, 1F
模擬浮點數格式化嗎?在53位要如何捨入時就不會了.. 去查了資料他說往最靠近的數字進位,這個我不懂,查到都是英文的資料,我勉強讀 他的意思是說如果小數部分大於一半就往上進,小於一半就往下捨嗎?那這樣53位要算 到什麼時候... 技藝競賽剩3天了..太晚上來問了... ※ 編輯: baobao566 (163.19.240.54), 11/30/2018 19:44:14

12/01 13:30, 5年前 , 2F
就是0捨1入,看下面一位
12/01 13:30, 2F

12/01 13:30, 5年前 , 3F
有線上模擬器可以算吧
12/01 13:30, 3F
https://goo.gl/PP2ooo 我在這邊推出VB.Net的誤差值和這邊計算機的 Round to nearest even是一樣的。 https://goo.gl/3t76eW Round to nearest even這邊有說明,能幫忙解釋英文的意 思嗎? 為什麼10.10100捨入是10.10,10.11100捨入是11.00 ※ 編輯: baobao566 (163.19.240.54), 12/01/2018 15:32:42

12/02 01:23, 5年前 , 4F
Round to nearest even 要讓捨去或 *進位* 後是偶數
12/02 01:23, 4F

12/02 01:24, 5年前 , 5F
XXXXXX11 => 進位 XXXXXX01 => 捨去
12/02 01:24, 5F

12/02 01:26, 5年前 , 6F
不只二進位有這樣, 十進位也有 "四捨六入五成雙"
12/02 01:26, 6F
文章代碼(AID): #1R_o-5W_ (Prob_Solve)
文章代碼(AID): #1R_o-5W_ (Prob_Solve)