• 締切済み

計算結果の誤差について・・・PC内部で何が起こってるの??

FLASH初心者です。 「毎フレーム0.1加算し、表示する」というフラッシュを作りました。 すると必ず、決まった値になった時に誤差が生じてしまいます。 フリーソフトのparafla!を使用しているのですが、フリーソフトの限界って事ですか?? はたまた単純にPCの処理能力不足?? コンピュータってすべて二進法で計算しているんですよね!?そこに問題があるのでしょうか?? 四捨五入すれば全く問題ないのですが気になります。 どなたか教えてください(>_<)

  • Flash
  • 回答数2
  • ありがとう数2

みんなの回答

  • wynnjp
  • ベストアンサー率71% (5/7)
回答No.2

何故、という回答にはなりませんが、Flash8でコンパイルしても同様の事象がありました。 119.8-119.2といった簡単な減算でも誤差が発生しますね。 JAVAやJavaScript、PCの電卓、EXCEL等念のため試した限りでは当然このような誤差は発生しないので、PCの仕様というよりはFlashの問題のような気がします。 解決法としては、既に書かれているように最初に10倍してあとで元に戻すか、結果を出してから四捨五入するか・・・と言っても四捨五入(Math.round)自体小数の四捨五入はできないので10倍して四捨五入して戻すという方法になると思います。 扱う変数が少なければ前者、大量の変数を扱うなら後者が楽だと思います。

参考URL:
http://java.wynn.jp/?eid=621512
  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.1

私もその内部計算については良くわからないのですが, 浮動小数 とやらの計算で誤差が生じるのだと思います。 おそらく, ParaFla! に原因があるのではなくて,FlashPlayer の仕様に原因があるのだと思います。 というか,根本的な 浮動小数 を扱う PC の仕様と言った方が良いかもしれません。 Adobe Flash で Flash(SWF) を作成しても, ふとした拍子に変な誤差が生じることは多々あります。 PCはそもそも小数の計算には向いていないので, 私は,例えば 0.1 づつ加算するのではなく, なるべく 1/10 ずつ加算しています。 1/10 ずつ加算しても,誤差が出る場合は出るのですが, 極力小数は使わないようにすると,ある程度誤差は防げる場合もあります。 例えば, ある変数の値を 1 づつ加算して, 実際の表示に使う場合はその値を 1/10 してやるとかです。

INOCULATIO
質問者

お礼

ありがとうございます。 PCにも苦手があるんですね(-。-;) 参考になりました。

関連するQ&A

  • Flash Lite1.1 計算の誤差

    続けざまにすみません。CS3でFlash Lite1.1の計算式を作っていますが 計算式で絶対整数の答がでるはずなのに.00001くらいの誤差が出てしまうのはなぜでしょうか? AS2では、全く出ませんがFlash Lite1.1では出るので四捨五入などで なんとか整数にしています。 なんとかならないのでしょうか? 単純に1000000に0.23をかけただけでも、230000にならなかったりします。

  • dounle型で計算時の誤差

    今、VC++(MFC)で、15桁の数値まで表示可能な電卓アプリを作成しています。 そこで今つまずいているのが、double型で計算したとき(演算結果が小数の場合)の誤差の問題です。 とりあえず、いろいろなHPなどの情報を見たりして、誤差問題解決を下記のようにしました。 「数値の頭(左側)から16桁目を四捨五入する」 小数の場合はほとんど誤差が生じるため、計算後、計算結果が小数ならば、必ず 上記の誤差処理を行っています。 しかしこれでは、以下の場合に不具合が出てしまいます。 ・ 0.99 999 999 999 999 ÷ 10 = 本来の答えは「0.09 999 999 999 999 9」 ⇒ しかし15桁までの表示なので、本来は「0.09 999 999 999 999」と15桁まで出力     させなくてはいけないのに、16桁目の「9」を四捨五入したせいで「0.1」という表示に     なってしまう。 16桁目を四捨五入しないと誤差をとることはできないし、でも上記の例だと正しい結果 が出力されません。 どうしたらいいのか頭を悩ませています。 何か良い解決法等あれば、ご教授お願いします!!

  • 誤差の表示の仕方について。

    こんにちは。 卒論を控えた大学生です。 今、大量のデータがエクセルで 温度   値1   誤差    値2    誤差 300   0.320   0.0011   0.158   0.0013 200   0.382   0.0033   0.155   0.0039 100   0.427   0.0026   0.163   0.0033 と入っているのですが、最終的にはtex用に、 誤差を四捨五入、()内にいれて 300 & 0.320(1) & 0.158(1) 200 & 0.382(3) & 0.155(4) 100 & 0.427(3) & 0.163(3) と加工したいのですが、自動でやるにはどうすればよいか 詳しい方のアドバイスをお願いいたします。

  • 計算機の使用法

    計算機を使った計算のやり方について質問します。 答えを小数点以下第5位を四捨五入した小数点第4位までの小数 で表せ。という問題があって、答えは 2/3√3になります。 こういう場合は2を3√3の計算した数値の小数第5位を四捨五入したもので割ればいいのですか?それとも、小数第10位くらいまで計算した値で割って、最終的に第5位を四捨五入すればいいのでしょうか? この場合はいいですが、複雑な計算になると、四捨五入したものどうしをたくさん計算すれば最終的な答えにだいぶ誤差が生まれる気がしまて。すみません単純な質問をして。

  • 本を読んでいてわからないことがありました。

    本を読んでいてわからないことがありました。 「2407と1428を四捨五入して百の位までの概数にすると、2400と1400になる。これらを足し算すると約3800である。 正確な計算をすると、2407+1428=3835となるから、誤差率は約0.9%となる。 もっと正確な計算結果に近づけるには四捨五入するケタを小さくすればよい。2407と1428を四捨五入して十の位までの概数にすると、2410と1430になる。これをたして約3840とすれば誤差率は約0.1%になり、より正確な値に近づく。」 と書いてあったのですが、どういう風な計算をしたら誤差率が0.9%や0.1%となるのでしょうか。 というかそもそも誤差率ってなんでしょうか? なんのために誤差率というものを求めるのでしょうか? 解説お願いします

  • 概数計算で困っています。

    概数計算の問題です。 63.2 - 3.57を計算しなさい。という問題で、数値は測定にとって得られたもので、下一桁に若干の誤差が含まれるそうです。 私は、そのまま計算をし、59.63という数字が出てきました。 ここで、誤差が生まれるので、答えを四捨五入をして、59.6にしました。 答案用紙が返ってきましたが、×でした。 自分では、問題点を見つけることができません。 教えてください。 解かりにくい文章で申し訳ありませんが、よろしくお願いします。

  • πの値は、おおまかでも大事な計算に支障ない?

    たぶん、ロケットの打ち上げや国際宇宙ステーションの計画などの計算に「π」を使うと思うのですが、何桁までかで四捨五入して使っても、大きな問題は起きないのでしょうか~?少々の誤差も計算するのでしょうか~?

  • エクセルの四捨五入について

    数枚のシートで計算した結果をまとめて一枚のシートに表にしたいのですが、コピー&ペーストでやると、はりつけた先の値が四捨五入されてしまいます。物理の実験のデータなので四捨五入されてしまうと誤差を求められません。。解決策教えていただけますか?

  • 計算結果についての疑問

    電気の本に書かれている計算結果に 7.07÷250=0.0283[A]や 2/π×50√2=45[A]という部分があるのですがこれらを実際に計算してみると 7.07÷250=0.02828 2/π×50√2=45.038648・・・となるので本の答えのように表すのなら 7.07÷250≒0.0283[A]や2/π×50√2≒45[A]となると思うのですが、どうして実際の計算結果とは違う値を=で表しているのでしょうか? 問題には四捨五入の位置や小数点以下何桁まで求めるといった指定は何も書いてません。 同じ本の中の別の計算では≒を使って表している場合もあるので、何か=と≒を使い分けるルールがあるのでしょうか?

  • 情報に詳しい方本当にお願いします

    2つ質問があるのでお願いします。 1.丸め誤差とは、例えば、3.5+3.5は7.0ですが、四捨五入したやつを+と、4.0+4.0で8.0になる、みたいなことを丸め誤差というのですか? 2.画像の問題がさっぱり分かりません。解説お願いします。

専門家に質問してみよう