Re: [問題] 關於反三角函數的計算

看板Python作者 (←這人是超級笨蛋)時間11年前 (2013/07/26 15:24), 編輯推噓3(301)
留言4則, 4人參與, 最新討論串2/2 (看更多)
※ 引述《newsted5566 (NEWSTED5566(亂劣我文))》之銘言:

07/26 12:40,
我執行你的程式碼,是回傳30。
07/26 12:40

07/26 13:33,
我的電腦是mac
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
LOL
07/26 16:26, 1F

07/26 16:55, , 2F
C 語言的3/5 結果應該是0。至少在GCC下是這樣。
07/26 16:55, 2F

07/26 17:17, , 3F
樓上XD
07/26 17:17, 3F

07/26 18:40, , 4F
請自行帶換成 5 / 3...
07/26 18:40, 4F
文章代碼(AID): #1HyYGqiq (Python)
文章代碼(AID): #1HyYGqiq (Python)