[請益] 如何直接判斷浮點數運算時有誤差(贈P幣)

看板Soft_Job作者 (寶寶)時間5年前 (2018/11/30 19:55), 5年前編輯推噓8(807)
留言15則, 8人參與, 5年前最新討論串1/2 (看更多)
技藝競賽剩3天,太晚上來問了...能解決問題者贈上全部家產稅前350P。 為了這個問題困擾了許久,不斷地查資料,查完這個觀念,又看到新 的名詞與此題有關聯。以我查到的資料VB.Net在浮點數運算時會將數 字以IEEE754來標準來做,預設的浮點數型態是Double,所以是64位, 有誤差是因為將他轉成2進制,小數部分如果無限循環,取到53位往最 靠近的捨入(Round to nearest),二進制的這個模式我不太懂意思, 翻資料查到的大概又都是英文...,以我理解的英文意思是說如果小數 部分大於一半就往上進,小於一半就往下捨嗎?那這樣53位判斷大小要 算到什麼時候...。 還有一些環境的因素,我看到一個文件上面說編譯器可能會幫你最佳化 運算式,例如說x = a+b-a -> x = b,那這題有很多環境的問題,是要 怎麼確定這個答案是唯一的呢?此題是今年高職技藝競賽的程式設計賽前 模擬學科試題,有想過他可能只是出經典範例來考你知不知道浮點數有 誤差,如果只是這樣就太好了,但是如果不是還是有個準確判斷的方法 比較保險。 (出處:https://goo.gl/oAzyNB Compiler Optimization) 如果判斷此題需要手算,請問有無快速紙筆手算判斷的方法? 下面圖兩題答案分別為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/Soft_Job/M.1543578908.A.B61.html

12/01 00:45, 5年前 , 1F
都說競賽了還上來問人?
12/01 00:45, 1F

12/01 06:45, 5年前 , 2F
這算事前準備吧,他也找過資料,不用這麼不耐煩吧樓上
12/01 06:45, 2F

12/01 06:48, 5年前 , 3F
個人也挺好奇,這種計算有規則可循?不然怎麼肯定兩題
12/01 06:48, 3F

12/01 06:48, 5年前 , 4F
的答案不同
12/01 06:48, 4F

12/01 10:04, 5年前 , 5F
你是在問這個嗎 https://youtu.be/CiKUMWu7AmU
12/01 10:04, 5F
我已經知道小數有誤差的觀念了,這部影片並沒有沒有看到計算誤差有無相等的方法。

12/01 13:27, 5年前 , 6F
若沒辦法用1/2^n 和表示先猜不相等吧
12/01 13:27, 6F

12/01 13:28, 5年前 , 7F
做完考卷再回來算(誤
12/01 13:28, 7F

12/01 13:30, 5年前 , 8F
IEEE754如果你手算夠快也可以先算
12/01 13:30, 8F

12/01 13:33, 5年前 , 9F
有誤差的狀況下相等也是賽到的而已 一般會假設不相等
12/01 13:33, 9F
IEEE754怎麼算..不懂Round to nearest的規則,還是他就是0捨1入。

12/01 13:33, 5年前 , 10F
只能照算,別無他法
12/01 13:33, 10F

12/01 13:35, 5年前 , 11F
不過我總覺得相等跟不相等的機率各佔一半
12/01 13:35, 11F
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:17:27

12/01 16:01, 5年前 , 12F
是不是round到最後一位是0
12/01 16:01, 12F
應該不是 x000032001: 要被捨去的數值是100...時 捨去後讓他變成偶數 12/01 16:31

12/01 16:37, 5年前 , 13F
在guard跟round bit為10的條件下,看LSB為1就進入,為0就
12/01 16:37, 13F

12/01 16:37, 5年前 , 14F
捨去
12/01 16:37, 14F
感謝大神丟關鍵字,往正確的方向查到了,簡單來說進位的狀況有 1. 53位為1,54位後(含)有任一數字為1。 2. 52位為1,53位為1,54位後(含)都為0,像偶數捨入,進位。 感謝!把捨入的部分弄釐清後,可以來運算誤差的部分了~ 請您待我解決問題後再獻上P幣。 網路上資料:https://goo.gl/j8ikqu ※ 編輯: baobao566 (163.19.240.54), 12/01/2018 18:04:11 ※ 編輯: baobao566 (163.19.240.54), 12/01/2018 18:12:48

12/01 20:21, 5年前 , 15F
推個
12/01 20:21, 15F
文章代碼(AID): #1S0IKSjX (Soft_Job)
文章代碼(AID): #1S0IKSjX (Soft_Job)