- 締切済み
数値の誤差
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- nuko_punch
- ベストアンサー率40% (10/25)
メモリ? 倍精度浮動小数点は以下の構成になっています。 (-1)^符号部 * 2^(指数部-1023) * (1.仮数部) 符号部:1[bit] 指数部:11[bits] 仮数部:52[bits] 計:64[bits] 例)[符号部,指数部,仮数部]で書きます 1.0は[0,1023,0000....0b] 0.5は[0,1022,0000....0b] 1.5は[0,1023,1000....0b] ○本題 15^15は 437,893,890,380,859,375 で二進数表記した場合 110 0001 0011 1011 0110 0010 1100 0101 1001 0111 0111 0000 0111 1110 1111b 式『(-1)^符号部 * 2^(指数部-1023) * (1.仮数部)』を当てはめると 下記になります。 (-1)^0 * 2^58 * 1.10 0001 0011 1011 0110 0010 1100 0101 1001 0111 0111 0000 0111 1110 1111b 符号部は素直に0 指数部は58 = (1081 - 1023) 仮数部は10 0001 0011 1011 0110 0010 1100 0101 1001 0111 0111 0000 0111 1110 1111b ここでちょっと見てください。 58[bits]では52[bits]を6[bits]超えています。 この場合、浮動小数点では影響の小さい(値の小さい)下位のビットを四捨五入します。 10 0001 0011 1011 0110 0010 1100 0101 1001 0111 0111 0000 0111 11(10 1111)b カッコ内が四捨五入対象(その中の最上位ビットが0or1) よって 仮数部は 10 0001 0011 1011 0110 0010 1100 0101 1001 0111 0111 0000 1000 00b となります。 これが誤差の原因です。 確かめ算をします。 [0,1081,1000010011101101100010110001011001011101110000100000b] は (-1)^0*2^(1081-1023)*(1.1000010011101101100010110001011001011101110000100000b) =2^58*(1.1000010011101101100010110001011001011101110000100000b) =2^6*2^52*(1.1000010011101101100010110001011001011101110000100000b) =2^6*11000010011101101100010110001011001011101110000100000b =11000010011101101100010110001011001011101110000100000000000b =437,893,890,380,859,392 IA-32アーキテクチャではサイズを大きくした、拡張倍精度浮動小数点などもありますが。 (x87 FPU命令ですが) 結局は破綻する箇所が先送りされるだけです。 拡張倍精度浮動小数点は、コンパイラ独自拡張や機械語でないと使用出来ません。 インラインアセンブラもOKですが。 Cのdoubleに持ってきた瞬間に誤差が出ます。 ※ 途中数値間違っていたらごめんなさい
- koko_u_
- ベストアンサー率18% (459/2509)
有効桁数などで検索して下さい。 double 型でだいたい 15桁くらいまでしか表現できなかったはずです。 15^15 = 437893890380859375 かな?
関連するQ&A
- 測量の誤差全般について
標記の件について、ネットや参考書を読んでいるのですが、 恥ずかしながら今ひとつ理解できません。 すみませんが、御教示頂きたく宜しくお願い致します。 質問1 「確率誤差」とは50%の確率で生じる誤差の範囲とすると、「平均2乗誤差」も何%で生じる誤差の範囲とかで定義されるのでしょうか?(「平均2乗誤差」がイメージできなくて悩んでおります。) また、「平均2乗誤差」が「ガウスの誤差曲線」にどう関係するか合わせて御教示お願いします。 質問2 「確率誤差」は、下式の様に「標準偏差」や「平均2乗誤差」を使ってを求める様ですが、 それぞれ違った値で導かれた結果をどう理解して使い分けたらようのでしょうか? ε=0.6745×標準偏差 ε=0.6745×平均2乗誤差
- ベストアンサー
- 数学・算数
- 誤差を用いた数値の丸め方
化学成分分析を行った結果 30.0±2.6 wt% といった数値が出力される装置を使っています。 この場合、結果報告には「30」として記載するよう指導されたのですが、誤差と有効桁数の関係が良く分かりません。(この表記自体、間違いかもしれませんが) 誤差の桁数が測定値を丸める際に影響を及ぼす範囲について教えて下さい。 例えば上記の分析結果が 30.0±0.6 wt% や 30.0±0.06 wt% だった場合には、どういう風になるのでしょうか。 宜しくお願いします。
- ベストアンサー
- 数学・算数
- JAVAでMath.powを使用せずに、小数を小数で累乗したい
javaでiアプリを作っているのですが、 iアプリの仕様のせいか、Mathクラスの累乗に関係する関数(pow,log,expなど)、 が使用できません。(使用しているDojaのバージョンは5.0) powの仕組みを使って、小数を小数で累乗するプログラムを作成したいのですが、 教えていただけないでしょうか?
- 締切済み
- Java
- 数値微分法についてです。
数値的に微分を評価する時に、中心差分を使っているのですが、 どう考えても数値誤差としか思えない結果しかでません。 区切り幅は誤差が最も小さくなるように選んでいます。 中心差分よりも精度の良い数値微分法があれば教えていただけないでしょうか。 評価する関数は解析的に与えられておらず、補間して得られるようなものです。 (補間の精度にもよるのだと思いますが・・・)
- ベストアンサー
- 数学・算数
- 計算の丸め誤差の解消について
プログラム上で計算するときに丸め誤差が発生し、困っています。 丸め誤差が発生している計算は -0.004+0.006+0.002 なのですが、 -0.004+0.006+0.002=0 となるところが、 =8.47E-09 となってしまっています。 オーダーの異なる計算ではないにもかかわらず、どうして誤差が発生するのかが理解できず困っています。 上の数値(左辺の方)の算出は、10^(-1)のオーダーの数値から計算されています。 多分、浮動小数点を使っているからだろうと考えているのですが、どのように解消したらよろしいでしょうか? 固定小数点を用いると、浮動小数点より誤差が少ないとありましたが、Cで固定小数点を用いる方法もわからないです。 よろしくお願いします。
- ベストアンサー
- C・C++・C#
- 最小二乗法における誤差の求め方
こんばんは。 皆様よろしくお願いいたします。 あるデータにフィットさせる関数の係数を 最小二乗法を用いて、自分でプログラムを作って 見つけようと考えているのですが、 係数の誤差をどのように求めればいいかが わかりません。方法を探しても、直線の 場合はきれいに連立方程式が解けて、 誤差の伝播から計算するべき式が求まりますが、 一般の曲線の場合は解けないと思います。 gnuplotなどでフィッティングするとerrorが 出てきますが、あれはどのようにして 計算しているのでしょうか。 よろしくお願いいたします。
- ベストアンサー
- 物理学
- C言語のプログラムについて質問です。
C言語のプログラムについて質問です。 プログラムでどうしても2.2乗という少数のべき乗を使用しなければいけなくなったのですが、 POW関数では遅くて使い物になりません。 そこで、べき乗の高速化について調べたのですが、整数のべき乗の高速化しか出てきませんでした。 少数のべき乗の高速化アルゴリズムというものはあるのでしょうか?
- 締切済み
- C・C++・C#