#6: 浮點誤差


911091@stu.cchs.chc.edu.tw (17莊明達 David)

學校 : 彰化縣精誠中學
編號 : 4
來源 : [111.246.30.44]
最後登入時間 :
2023-06-10 18:41:31
a222. 加權成績 | From: [111.246.9.128] | 發表日期 : 2022-01-08 21:40

所謂的「浮點誤差(Round-off error)」,是指程式在計算小數時,會不可避免地出現誤差,想更深入了解原因的可以去搜尋「浮點誤差」。

解決這個問題的方法,第一種是使用「高精度計算(Arbitrary-precision arithmetic)」,第二種就是盡量減少小數運算。

關於第二種方法,你可以先用 float 輸入,將它乘上一個很大的十的倍數(以這題來說,比如1000),再把它轉成 int,算完之後最後再除掉這個倍數。當然,在某些情況下這仍然會出錯,不過對於本題來說足夠了。

除此之外,你也可以四捨五入到小數點很下面,比如第10位,這種不會影響答案(比答案位數小很多)、又比浮點誤差還大很多的位數。

 
#16: Re:浮點誤差


091043@stu.cchs.chc.edu.tw (14曹珺翔)

學校 : 不指定學校
編號 : 586
來源 : [36.235.158.153]
最後登入時間 :
2024-02-27 23:33:46
a222. 加權成績 | From: [223.141.243.200] | 發表日期 : 2022-04-04 11:29

所謂的「浮點誤差(Round-off error)」,是指程式在計算小數時,會不可避免地出現誤差,想更深入了解原因的可以去搜尋「浮點誤差」。

解決這個問題的方法,第一種是使用「高精度計算(Arbitrary-precision arithmetic)」,第二種就是盡量減少小數運算。

關於第二種方法,你可以先用 float 輸入,將它乘上一個很大的十的倍數(以這題來說,比如1000),再把它轉成 int,算完之後最後再除掉這個倍數。當然,在某些情況下這仍然會出錯,不過對於本題來說足夠了。

除此之外,你也可以四捨五入到小數點很下面,比如第10位,這種不會影響答案(比答案位數小很多)、又比浮點誤差還大很多的位數。


我發現可以不用轉int誒

 
ZeroJudge Forum