アカウント名:
パスワード:
http://svn.php.net/viewvc/php/php-src/trunk/Zend/zend_strtod.c?r1=3070... [php.net]
変数に volatile を付け足すだけの修正で直ったらしいんだけど、どういう最適化が原因で無限ループになるの?
インテルマシン以外でも起きるのかなこれ? インテルマシンでだけ起きるなら、浮動小数点の内部表現形式が(IEEE754の64ビットじゃなくて)80bitであることが原因かも(volatileが付くとたぶんいちいち64ビットに直すコードになるはず)。
コミットログに "Fix bug #53632 with x87 fpu" とあるので80bit問題で正解でしょう。10進小数表記→2進浮動小数点数へのoptimalな変換は、途中に二重丸めが生じると境界値で誤った数になってしまうので精度を正確にコントロールする必要があります。全部整数でやるのが安全なんですが、bignum計算がかなり多くなっちゃうんですよね…
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
吾輩はリファレンスである。名前はまだ無い -- perlの中の人
リリースされたパッチ (スコア:0)
http://svn.php.net/viewvc/php/php-src/trunk/Zend/zend_strtod.c?r1=3070... [php.net]
変数に volatile を付け足すだけの修正で直ったらしいんだけど、どういう最適化が原因で無限ループになるの?
Re: (スコア:1, 興味深い)
インテルマシン以外でも起きるのかなこれ? インテルマシンでだけ起きるなら、浮動小数点の内部表現形式が(IEEE754の64ビットじゃなくて)80bitであることが原因かも(volatileが付くとたぶんいちいち64ビットに直すコードになるはず)。
Re:リリースされたパッチ (スコア:1, 参考になる)
コミットログに "Fix bug #53632 with x87 fpu" とあるので80bit問題で正解でしょう。
10進小数表記→2進浮動小数点数へのoptimalな変換は、途中に二重丸めが生じると境界値で誤った数になってしまうので
精度を正確にコントロールする必要があります。
全部整数でやるのが安全なんですが、bignum計算がかなり多くなっちゃうんですよね…