(HTML5)試作品:浮動小数点の扱い、各エクスポータとの互換性


浮動小数点を使った計算結果で PC 用バイナリとエクスポータ間に誤差が生じている例。

PC 用のバイナリでは 1.04 と表示されているけど、HTML5 と SWF では 1.03999999794(以下略 となってる。

float

PC 用のバイナリだと浮動小数は float 型までをサポートしていて、表現できる範囲以上の値は近似値をとる。だから PC 用だと計算結果が 1.04 に丸められた。

カウンタオブジェクトは Double 型を扱えるが、計算は CF25 の変数上で行われているため、カウンタは結局丸められた数値を受け取って表示しているだけなので、結果は 1.04 となっている。

一方、変数が型による制限を受けないエクスポータ系では Double 型で計算して Double 型で計算結果も返しているっぽい。これだとカウンタの受け取った数値も 1.0399999794となり、ここに PC版とエクスポータとで計算結果の表示に誤差が生じる。

動作確認( HTML5 ):http://prester.org/html5/float/index.html

小さな誤差ではあるが

浮動小数を扱う場合、各エクスポータと計算結果に誤差を生じているという点が結構困る。

単純な計算だけど計算結果が 一方は 1.03 で一方は 1.04 となることで、オブジェクトの動作やイベントの定義に齟齬が生じる可能性。

もはや時代的にも PC 用がエクスポータに合わせて、変数は Double 型で確保するべきだと思うのだけど、そうすると MMF2 との互換性という点でも考慮しないといけなくなる点が出てくるため、仕様を変えるのならエクスポータ側の方が PC 用に合わせるべきなのだろう。

結局仕様というか本体の設計が古いんだよなぁと思う。


Leave a comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です