Re: [問題] 關於反三角函數的計算
※ 引述《newsted5566 (NEWSTED5566(亂劣我文))》之銘言:
→
07/26 12:40,
07/26 12:40
→
07/26 13:33,
07/26 13:33
→
07/26 14:31,
07/26 14:31
看起來像是平台差異, 浮點數誤差和 floor division 合力造成的有趣現象
以下「前者」指 Windows (Python 2.7.5, MSC 64 bit)
「後者」則是 Mac OS X (Python 2.7.2, Apple Clang 4.0)
前者 math.asin(0.5) * 180 顯示 94.24777960769380
後者 94.24777960769379
這個差距似乎是兩個平台實作 arcsin 得到的結果不太一樣
不過哪個比較正確我就不知道了, 我不想手算驗證...
接下來 // d 就有趣了
// 在 Python 裡叫做 floor division (參見 PEP238)
這個除法會把出來的結果自動做 floor
原始用意是用來模仿類似 C 裡面 int a = 3 / 5; (會得到 1) 的行為
因為 math.pi 在兩個平台上都是 3.141592653589793
(感謝老天再後面一位是 2, 所以沒有進位問題)
數學上
94.24777960769380 / 3.141592653589793 約為 30.0000000000000031
94.24777960769379 / 3.141592653589793 則是 30 整
可是由於浮點數誤差, 真正出來的數字會比上面的小一點點
(我猜的, 這數字太大我實在是不想換算成 IEEE 754 來證明)
而前者仍然在 30 以上, 所以 // 會得到 30.0
後者則是變成很接近但小於 30, 出來就變成 29.0
應該是這樣吧
改用 / 的話因為 Python 會自動調整輸出
「比 30 大一點點」和「比 30 小一點點」的浮點數都會被顯示成 30.0
所以看起來兩者就會相同
順帶一題, 如果你真的需要準確的數學, 請考慮改用比較專門的 module
--
「我最想要的同伴嘛,首先是要笑口常開,其次是我們能永遠不會發生誤會。
如果這些都能辦到的話,嗯,如果他是世界上第一流的橋手,也還不錯。」
-- 班尼多‧加羅素,前義大利藍隊成員
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.32.81.146
推
07/26 16:26, , 1F
07/26 16:26, 1F
推
07/26 16:55, , 2F
07/26 16:55, 2F
推
07/26 17:17, , 3F
07/26 17:17, 3F
→
07/26 18:40, , 4F
07/26 18:40, 4F
討論串 (同標題文章)