×
解除綁定,重新設定系統帳號的密碼
您的系統帳號 ID:
您的系統帳號:
您的帳號暱稱:
設定新密碼:
設定新密碼:
×
請輸入要加入的「課程代碼」
請向開設課程的使用者索取「課程代碼」
分類題庫
解題動態
排行榜
討論區
競賽區
登入
註冊
發表新討論
#3257: _Re:
d000032002
((選擇題)為SCWCD和專案努力)
學校:
國防大學
編號:
7465
×
傳送站內訊息
傳給:
主題:
內容:
來源:
[114.47.153.127]
註冊時間:
2009-08-10 20:17:50
最後登入時間:
2018-01-01 16:11:21
.
Unfinished!
| From: [115.83.30.47] | 發表日期: 2010-01-11 17:44
這很可能是傳說中的「浮點數誤差」!0.812 轉成二進位後會是一個循環小數,但是電腦中的浮點數的有效位數是有限的,後面的部份就被去掉了,因此它會是一個接近 0.812 的值而不是真的 0.812。
理論上 0.812 乘上一個 250 的倍數會變成整數,但是由於它只是一個接近 0.812 的值而不是真的 0.812,所以乘出來的數不會是整數。
更糟的每個編譯器取近似值的方法不太一樣,所以很有可能你的編譯器取出來的近似值和 ZeroJudge 上的編譯器所取出來的近似值就不同,導致不同的執行結果。
這題是很好的「浮點數誤差」的教材。
解決辦法:
1. 給它一些誤差容許值。比如說先減掉 1e-12 再無條件進位。
2. 用整數來解。如果你的總價是 total (整數),那麼折扣後的金額就是 (total * 812 - 1) / 1000 + 1。
或許用ceil這個方法就好了!!
題目要取到整數位