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

作者: baobao566 (寶寶)   2018-11-30 19:55:06
技藝競賽剩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)
作者: eva19452002 (^^)   2018-12-01 00:45:00
都說競賽了還上來問人?
作者: x246libra (楓)   2018-12-01 06:45:00
這算事前準備吧,他也找過資料,不用這麼不耐煩吧樓上個人也挺好奇,這種計算有規則可循?不然怎麼肯定兩題的答案不同
作者: UnReal5566 (匪莪伊蒿)   2018-12-01 10:04:00
你是在問這個嗎 https://youtu.be/CiKUMWu7AmU
作者: longlongint (華哥爾)   2018-12-01 13:27:00
若沒辦法用1/2^n 和表示先猜不相等吧做完考卷再回來算(誤IEEE754如果你手算夠快也可以先算有誤差的狀況下相等也是賽到的而已 一般會假設不相等
作者: alan23273850   2018-12-01 13:33:00
只能照算,別無他法不過我總覺得相等跟不相等的機率各佔一半
作者: danielu0601 (黒猫.俺の嫁)   2018-12-01 16:01:00
是不是round到最後一位是0
作者: CorkiN (柯基)   2018-12-01 16:37:00
在guard跟round bit為10的條件下,看LSB為1就進入,為0就捨去
作者: turkeyonly (逼逼)   2018-12-01 20:21:00
推個

Links booklink

Contact Us: admin [ a t ] ucptt.com