- 締切済み
計算結果の誤差について・・・PC内部で何が起こってるの??
FLASH初心者です。 「毎フレーム0.1加算し、表示する」というフラッシュを作りました。 すると必ず、決まった値になった時に誤差が生じてしまいます。 フリーソフトのparafla!を使用しているのですが、フリーソフトの限界って事ですか?? はたまた単純にPCの処理能力不足?? コンピュータってすべて二進法で計算しているんですよね!?そこに問題があるのでしょうか?? 四捨五入すれば全く問題ないのですが気になります。 どなたか教えてください(>_<)
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- wynnjp
- ベストアンサー率71% (5/7)
何故、という回答にはなりませんが、Flash8でコンパイルしても同様の事象がありました。 119.8-119.2といった簡単な減算でも誤差が発生しますね。 JAVAやJavaScript、PCの電卓、EXCEL等念のため試した限りでは当然このような誤差は発生しないので、PCの仕様というよりはFlashの問題のような気がします。 解決法としては、既に書かれているように最初に10倍してあとで元に戻すか、結果を出してから四捨五入するか・・・と言っても四捨五入(Math.round)自体小数の四捨五入はできないので10倍して四捨五入して戻すという方法になると思います。 扱う変数が少なければ前者、大量の変数を扱うなら後者が楽だと思います。
- BlurFiltan
- ベストアンサー率91% (1611/1754)
私もその内部計算については良くわからないのですが, 浮動小数 とやらの計算で誤差が生じるのだと思います。 おそらく, ParaFla! に原因があるのではなくて,FlashPlayer の仕様に原因があるのだと思います。 というか,根本的な 浮動小数 を扱う PC の仕様と言った方が良いかもしれません。 Adobe Flash で Flash(SWF) を作成しても, ふとした拍子に変な誤差が生じることは多々あります。 PCはそもそも小数の計算には向いていないので, 私は,例えば 0.1 づつ加算するのではなく, なるべく 1/10 ずつ加算しています。 1/10 ずつ加算しても,誤差が出る場合は出るのですが, 極力小数は使わないようにすると,ある程度誤差は防げる場合もあります。 例えば, ある変数の値を 1 づつ加算して, 実際の表示に使う場合はその値を 1/10 してやるとかです。
お礼
ありがとうございます。 PCにも苦手があるんですね(-。-;) 参考になりました。