アカウント名:
パスワード:
数値演算の精度を端折って高速化したと。
浮動小数点演算で、64ビットのdouble型演算の代わりに、可能な限り32ビットのfloat型の演算を使用することで、大幅にその演算速度が向上したという。
数値演算の精度が問題になる場面で、不具合が起きなければいいが・・・Officeスウィート系のWebアプリは怖くて使えんなあ。
JSの数値型はdoubleだから、今まではfloatをエミュレートするのにコストがかかってたのよ
例えばA:float = B:float + 1.0は普通のJSだと本来A = ToFloat(ToDouble(B) + 1.0:double)とすることになる
実はこれなら今まででもA = B:float + 1.0:floatと最適化できてたんけど
A:float = B:float + C:float + 1.0みたいに少し違うパターンだと途端に最適化していいのかどうかの判断が難しくなってくるので、本当は結果が変わらないのでしていい場合もできてなかった
なのでこの度は、ネイティブからの「コード変換時に」floatで演算していい部分を「doubleをfloatの精度を持ったdoubleに丸める」という効果を持ったMath.fround関数で囲むことで明示的に示しfloat演算での無駄を100%無くすことに成功したよって話
擬似コードはこんな感じになるA:float = Math.fround(B:float + C:float) + 1.0これはつまりF:float = B:float + C:floatA:float = F:float + 1.0:floatと同じ意味になるから最初に挙げたパターンの判断のみで最適化可能A = B:float + C:float + 1.0:float
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
「科学者は100%安全だと保証できないものは動かしてはならない」、科学者「えっ」、プログラマ「えっ」
数値演算の精度が問題になることないの? (スコア:0)
数値演算の精度を端折って高速化したと。
浮動小数点演算で、64ビットのdouble型演算の代わりに、可能な限り32ビットのfloat型の演算を使用することで、大幅にその演算速度が向上したという。
数値演算の精度が問題になる場面で、不具合が起きなければいいが・・・Officeスウィート系のWebアプリは怖くて使えんなあ。
Re:数値演算の精度が問題になることないの? (スコア:1)
JSの数値型はdoubleだから、今まではfloatをエミュレートするのにコストがかかってたのよ
例えば
A:float = B:float + 1.0
は普通のJSだと本来
A = ToFloat(ToDouble(B) + 1.0:double)
とすることになる
実はこれなら今まででも
A = B:float + 1.0:float
と最適化できてたんけど
A:float = B:float + C:float + 1.0
みたいに少し違うパターンだと途端に最適化していいのかどうかの判断が難しくなってくるので、
本当は結果が変わらないのでしていい場合もできてなかった
なのでこの度は、ネイティブからの「コード変換時に」floatで演算していい部分を
「doubleをfloatの精度を持ったdoubleに丸める」という効果を持ったMath.fround関数で囲むことで明示的に示し
float演算での無駄を100%無くすことに成功したよって話
擬似コードはこんな感じになる
A:float = Math.fround(B:float + C:float) + 1.0
これはつまり
F:float = B:float + C:float
A:float = F:float + 1.0:float
と同じ意味になるから最初に挙げたパターンの判断のみで最適化可能
A = B:float + C:float + 1.0:float