Python version | Javascript version | WhitepaperPython vs Javascript浮點運算給出了非常不同的答案。我究竟做錯了什麼?
因此,我正在一個網站上計算兩個玩家遊戲的Glicko評分。它涉及到大量的浮點運算(平方根,指數,除法,所有討厭的東西),而且出於某種原因,我正在從線程換行算法的Python實現中獲得完全不同的答案。 Python版本基本上爲原始白皮書中描述該算法的示例提供了預期的答案,但是Javascript版本相對較差。
我在翻譯過程中犯了一個錯誤還是Javascript的浮點數學不太準確?
Expected answer: [1464, 151.4]
Python answer: [1462, 155.5]
Javascript answer: [1470.8, 89.7]
所以評級計算不是很差,準確率爲99.6%,但方差已經減少了2/3!
編輯:人們已經指出,Pyglicko版本中RD的默認值是200.這是原始實現者留在測試代碼中的一種情況,我相信,因爲測試用例是用RD 200,但顯然默認應該是350.但是,我確實在Javascript中指定了200個測試用例,所以這不是問題。
編輯:更改算法以使用map/reduce。評級不太準確,差異更準確,無論是否有明顯的原因。 Wallbanging開始。
這可能是因爲Python和JavaScript不以相同的方式處理浮點數。你知道浮點數的工作原理嗎?(當他們沒有) – Halcyon
不知道這是否有任何意義,但rd在python中默認爲200,在javascript中默認爲350。 @Frits:兩者都使用IEEE 754. –
是的,我瞭解浮點數的工作方式,例如,它們不能精確地表示十進制數。 @Daniel Baulig:RD在Python中默認爲200,這是不正確的,但用於測試用例。在白皮書中,它指定RD默認爲350,但給出的測試用例在RD爲200的玩家上 - 所以我在Javascript中設置了正確的默認值,但在RD爲200的測試用例中稱爲新玩家 –