Python version | Javascript version | WhitepaperPythonとJavascript浮動小数点演算は非常に異なる答えを与えます。私は間違って何をしていますか?
私は、2人のプレーヤーのゲームの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を使用するようにアルゴリズムを変更しました。格付けはそれほど正確ではなく、分散はより正確で、どちらも識別可能な理由がありません。ウォーバングが始まります。
これは、PythonとJavaScriptが同じ方法で浮動小数点数を処理しないためです。浮動小数点数の仕組みを知っていますか?(そしてそうでないときは) – Halcyon
これは何の意義があるのか分かりませんが、rdのデフォルトはPythonでは200、JavaScriptでは350です。 @Frits:どちらもIEEE 754を使用しています。 –
浮動小数点数の仕組みや、たとえば10進数を正確に表すことはできません。 @Daniel Baulig:RDはデフォルトでPythonで200に設定されていますが、これは正しくありませんが、テストケースに使用されます。ホワイトペーパーでは、RDのデフォルト値は350ですが、与えられたテストケースはRDが200のプレイヤーであることを指定しています.Javascriptでは適切なデフォルトを設定しましたが、テストケースでRDを200 –