小数点を含んだ計算で覚えておきたいこと
2009年04月03日 - kijima
コンチわー! さいきんコンチで遊びたくて二台目の携帯が欲しいkijimaです(iPhoneユーザーなので。。)
先日、Flash開発中に出力されたログの中に身に覚えのない数字が現れました。
それは以下のような数字。
0.30000000000000004
小数点を含む数字で乗算していたんですが、どうやらそれが原因らしい。ためしにこんなfor文でtraceしてみると、、
for(var i:int=0;i<10;i++){ trace(0.1*i) } //出力 0 0.1 0.2 0.30000000000000004 0.4 0.5 0.6000000000000001 0.7000000000000001 0.8 0.9
乗算に限らず、下のような計算でも同じことが起こるようですね。
trace( 0.1 + 0.2 ); // 出力-> 0.30000000000000004 trace( 1.1 - 0.5 ); // 出力-> 0.6000000000000001
除算では起こりませんでした。
for(var i:int=0;i<10;i++){ trace(i/10) } //出力 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9
Flashでは、JavaScriptと同じく「IEEE-754 倍精度浮動小数点数」という規格を採用しているとのことですが、どうやらこの仕様の影響のようです。…もし間違っていたら、「ちげーよ、このバカメガネ!」と優しく教えてください。
こういう現象が起こるということを知っておくと、思わぬ勘違いをしなくて済みそうです。(ちなみにas2でパブリッシュしてみたところ、この現象は起こりませんでした)
参考記事
Number -ActionScript 3.0 コンポーネントリファレンスガイド
A re-introduction to JavaScript - MDC
- 本城直季風のムービーをFlashで利用したい!
- ガイドレイヤーに記述したフレームスクリプトの落とし穴
- [Flex]カスタムコンポーネントのカスタムイベントをMXML内でリスナー登録する方法
- FlashCS4で書き出されたswcファイルは、フレームスクリプトが実行されない?
- Flashで光の表現/BitmapDataを使って増幅させる
- Image.source に入れた画像のサイズを取るには
- 【Flex】ComboBoxとMenuを組み合わせて多段プルダウンメニューを作ってみました
- 「Flasher 100の質問」に答えてみた。
- Flex プロジェクト と ActionScript プロジェクト
- 「Flasher 100の質問」に答えてみた。
- AfterEffects
- AIR
- android
- Arduino
- AS2
- AS3
- as3
- BitmapData
- CHECKMATE
- crossdomain
- CS4
- Date
- DisplacementMapFilter
- Event
- event
- ExternalInterface
- FileReference
- FireBug
- FireFox
- Flash Lite
- FlashDevelop
- FlashPlayer10
- flash時計
- Flex
- Font
- GoogleMapsAPI
- INFINITY TANK BATTLE
- JSFL
- JSON
- Mobile
- mxp
- PaperVision3D
- Particle
- Progression
- Sound
- TextField
- Tips
- tool
- trace
- wonderfl
- Wonderfl
- xml
- アニメーション
- サンプルコード
- タイムライン
- デバッガ
- バグ
- フレーム
- ブログパーツ
- 爆速








