【連載】Twitterまとめ - 第2回 サービス企画の苦しみ編(5月3週)
2010年05月27日
サイテック株式会社で、根っからの技術者である社長や、大手IT企業から転職してきた仲間たちと議論しながら、社会をもっと豊かに、幸せにするアプリケーションを作ってみませんか?
この会社の特徴を知る
など 8 記事
など 17 記事
など 66 記事
Flexに限らないようなのですが、四則演算でNumber型の計算は正確に表現できないようです。
つまり『4.57-2.57』みたいな計算ですが、
普通に考えると答えは"2"のはずですが、プログラム上はなぜか”2.0000000000000004”という結果になります。
たむかいさんに聞いてみると、Number型では高精度の演算はできないとのこと。
なぜ”2.0000000000000004”になるのか?
気になって調べてみました。
同じく気になってる方いらっしゃいました↓
引用:
Number データ型では、2 進数浮動小数点計算のための IEEE 規格(IEEE-754)で指定されている
64 ビット倍精度フォーマットを使用します。
これが原因のようですね。
IEEE-754と2進数浮動小数点の計算についてはこちらに詳しくありますが、
つまり2進数で計算されるために起こる”丸め誤差”が原因でした。
これ常識のようですね(^^;)勉強不足ですみません。。
ウィキペディアより引用:
浮動小数点数の内部表現は2進数であるため、各ビットの重みは1⁄2、1⁄4 ...となるが、
1⁄3など、2進数で表せない重みが使われると無限小数となり、途中から切り捨てられるために誤差が出る。
たとえば、0.05は2進小数にすると0.000011001100110011001100...というように循環小数になる。
こういう値は丸め誤差として現れてしまう。
Flexで高精度の演算が必要な場合はできるだけサーバー側で行うべきということですね。
ひとつ勉強になりました。
トラックバックはありません
メンバー紹介
2010年05月27日
2010年05月18日
2010年04月26日
2010年04月19日
2010年03月10日
2010年03月10日
2010年02月25日
2010年01月22日
2009年12月24日
2009年12月21日
コメント