• ベストアンサー

けた落ちが誤差の理由は?

けた落ちが誤差の理由が理解出来ていません。 有効桁数が減少するしても、計算結果に誤差は出てないようなので、なぜだか分かりません。 123.456 - 123.455 = 0.001 上記で有効桁数6桁から1桁になりますが、誤差の理由を教えて頂きたいです。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • jjon-com
  • ベストアンサー率61% (1599/2592)
回答No.2

>計算時に、仮数部の表現範囲内に常に収まっている場合は、 >厳密には誤差ではないと言う理解で良いのでしょうか? 厳密には,と留保する必要はなく,その場合は明らかに誤差は生じません。

その他の回答 (1)

  • jjon-com
  • ベストアンサー率61% (1599/2592)
回答No.1

http://okwave.jp/qa/q6190944.html の私の過去の回答ANo.2

ipyodora
質問者

お礼

回答ありがとうございます。 仮数部の表現範囲を超えたら・・・それは誤差だ!と思っていたのですが、具体例でより明確に理解出来ました。 ただ計算時に、仮数部の表現範囲内に常に収まっている場合は、厳密には誤差ではないと言う理解で良いのでしょうか?ちょっとモヤモヤしております・・・。

関連するQ&A

  • けた落ちについて

    「けた落ち」が誤差となりうる理由について、ご教示ください。 書籍やネットで調べると、有効桁数が減少するから誤差となりうると記載がありますが 有効桁数が減少するからといって、なぜそれが誤差になるのかが 全くわかりません。 情報落ちや丸め誤差 が誤差というのは当然であり納得できるのですが。。。 可能であれば、誤差となる具体例と合わせてご教示いただけると幸いです。 ご教示のほど、お願いいたします。

  • 現在、情報処理試験の勉強をしているのですが、

    現在、情報処理試験の勉強をしているのですが、 桁落ち誤差がなぜ誤差なのかが分かりません。 有効数字(有効桁数)が減少する事の何が問題なのか、 正規化されて仮数部には0が入るだけで、 0なんだから、 誤差(誤った差)なんて無いように思えるのですが。。 複数のサイトを見てみましたが、 まとめると以下の3つのパターンの解説に大別できるように思われます。 (1)有効桁数が減少する事を桁落ち誤差と言う ⇒桁落ちによりどのような誤差が発生するのか解説がなく。 (2)正規化された部分に0以外が入ることがある。(プログラミング) http://www.k-cube.co.jp/wakaba/server/numerical_problem.html ⇒正規化された部分には0が入るという前提があるので、  このサイトの桁落ちと  情報処理試験の桁落ちは前提が違う。 (3)科学技術計算では2と2.000は違うので、  桁落ちは問題 http://itpro.nikkeibp.co.jp/members/ITPro/ITBASIC/20010719/5/  ⇒だいぶ探している答えに近い気はするが、   具体例がなく良く分からず。。 具体的な例で何が問題なのかを、 どうして誤差が発生するのか、 ご教授頂ければ幸いです。。

  • 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桁目を四捨五入しないと誤差をとることはできないし、でも上記の例だと正しい結果 が出力されません。 どうしたらいいのか頭を悩ませています。 何か良い解決法等あれば、ご教授お願いします!!

  • 桁落ちの誤差について

    #include <stdio.h> const double PI=3.141592653589793; double sum(long m) { double n,term,sum; n=1; sum=0; term= 1.0/ (n*n);/*初項*/ while( n<=m ){ sum+=term; n++; term= 1.0/ (n*n);/*次項の計算*/ } return sum; } /*この計算の答えはπ*/ int main(void) { double s; long m; int i; m=1; for(i=0;i<9;i++){ s=sum(m); printf("%2d m=%10ld sum= %22.16e err= %22.16e \n",i,m,s,s-PI*PI/6); m*=10;/*次は10倍にする*/ } return 0; のプログラムで誤差が生じる理由ってなんなんでしょうか?

  • 誤差を用いた数値の丸め方

    化学成分分析を行った結果 30.0±2.6 wt% といった数値が出力される装置を使っています。 この場合、結果報告には「30」として記載するよう指導されたのですが、誤差と有効桁数の関係が良く分かりません。(この表記自体、間違いかもしれませんが) 誤差の桁数が測定値を丸める際に影響を及ぼす範囲について教えて下さい。 例えば上記の分析結果が 30.0±0.6 wt% や 30.0±0.06 wt% だった場合には、どういう風になるのでしょうか。 宜しくお願いします。

  • 有効桁数 実験 計算値 誤差 計算など

    実験の結果のことについて 測定器が20kΩと表示した場合、レポートで2200Ωと表記するのはよろしいのでしょうか? 誤差の計算について 計算値の結果が有効桁数により、1.21×10^3Ωとなり、実測値1204Ωと誤差を計算する場合、これは誤差を計算できますか?

  • 有効数字と誤差率

    初歩的な質問で恐縮ですが、調べても良く分かりませんでした。 次のような場合、有効数字はどのようになるのでしょうか。 例)真の値が1.50、測定値1.55(有効数字3桁)のとき、 誤差ε=1.55-1.50   =0.05 質問1 引き算のときは、このように桁落ちが発生するので気をつけよ、とまでは書いてあるのですが、どう気をつけるのでしょうか? 有効数字は1桁になってしまったということなのか、5.00×10^2と言う風に3桁に直しておきなさいと言うことなのでしょうか? 質問2 誤差率を求める場合、 誤差率=(0.05/1.50)×100%    =3.333・・・% 質問1の結果によりますが、この場合、何桁で書くのだ正しいですか? 有効数字1桁でしたら、3% 有効数字3桁でしたら、3.33% の、どちらかだと思うのですが。 宜しくお願いします。

  • 有効桁数の数え方・誤差

    actionscriptをやっているのですが、有効桁数の数え方がよくわかりません。 たとえばNumber(有効桁数15桁)で public function sample() { var tf : TextField = new TextField(); var suuji : Number = 0.999; var suuji2 : Number = 1.001; var kekka : Number; kekka = suuji2 - suuji; tf.text = "" suuji2 + "-" suuji + "=" + kekka; } というものを実行させた場合kekkaが0.0019999999999998908になるのですが、この際の各々の変数の有効桁数は suuji 3桁 suuji2 4桁 kekka 0桁 という解釈で良いのでしょうか? そしてこの場合は桁落ちが起きていると言えるのでしょうか? また、この際にkekkaに誤差がでるのはNumberの有効桁数が15桁であるため、それ以降の桁に勝手に数字が入れられるということでしょうか? (0.999が勝手に0.9990000000000001092になる) もうひとつわからないことがあって、これは型の有効桁数を調べるプログラムなんですけど、 public function sample2() { var n : int; var sb : Number,sn : Number,t : Number; var tf : TextField = new TextField(); tf.border = true; tf.width = 400; tf.height = 300; n = 1; sn = t = 1.0; sb =0.0; while(sn != sb){ tf.appendText(n + ":" + sn + ":" + t + "\n"); n++; t = t / 10.0; sb = sn; sn = sb + t; } addChild(tf); } を実行すると 1:1:1 2:1.1:0.1 3:1.11:0.01 4:1.111:0.001 5:1.1111:0.0001 6:1.11111:0.00001 7:1.111111:0.0000010000000000000002 8:1.1111111:1.0000000000000002e-7 9:1.11111111:1.0000000000000002e-8 10:1.111111111:1.0000000000000003e-9 11:1.1111111111:1.0000000000000003e-10 12:1.11111111111:1.0000000000000003e-11 13:1.1111111111110001:1.0000000000000002e-12 14:1.1111111111111:1.0000000000000002e-13 15:1.11111111111111:1.0000000000000002e-14 16:1.1111111111111112:1e-15 と表示されるのですが、これだと16行目の有効桁数が16桁になっているのでしょうか? しかしそれだと型の有効桁数と矛盾するので、たまたま16桁目が1だっただけで有効桁数は15ということでしょうか? また、tに2や3の数字が勝手に入れらていますが、これも上記のように有効桁数ではない部分に勝手に数字を入れられているということでしょうか? 長文、また見辛く申し訳ありません。

  • 一桁台の視聴率の誤差はどのくらいありますか?

    一桁台の視聴率の誤差はどのくらいありますか? 視聴率の誤差 - 高精度計算サイト このサイトで計算してみたところ、サンプル600で視聴率1%で計算した場合も 真の視聴率 は0.204~1.796%の範囲と表示されました。 これは本当に正しいのでしょうか?

  • 20桁まで計算したいのですが

    20桁まで計算したいのですがなにか良いソフトありませんか? ポケットコンピューターは10桁のBCD計算ができましたが 20桁まで計算できるものがでました。 Mathematicaのようなものは桁数を多く計算できるようなことをサイエンスカフェで 聞いたことがあります。 十進BASICでは16桁までですが20桁まで計算したいです。 何か良いソフトありませんか?できればフリーソフトが良いのですが・・・。