1 :
びぎなあ :
2000/05/20(土) 09:30 丸め誤差って何ですか? 打ち切り誤差って何ですか? よく分らないのです。 他に知っておかなければならない誤差にはどんなのがありますか? どなたか、例を用いて教えてください。 よろしくお願いします。
2 :
こういう基本的な事は :2000/05/20(土) 19:10
まず本で勉強してから、分からないところを聞くように。
3 :
名無しさん@1周年 :2000/11/01(水) 09:22
打ち切り誤差: 混むピューターの扱える数字は有限桁です。例えば、1,2,3,4.11, 19.193847459,0.100083, etc。従って、1/3 は0.333333...... のどこかで切れてしまいます, 例えば0.3333。どこで切れるかは 精度の問題でこれが単精度、倍精度などと言われるものです。 と言う訳で、この切れてしまった部分を打ち切り誤差と言います。 丸め誤差: 。。。。。。。。。。。。。。。。。。。。。。。。。。。。?
4 :
丸め誤差と打ちきり誤差 :2000/11/01(水) 11:30
単精度計算と倍精度計算を有効数字7桁で比較すると、
結果にズレがある。これは単精度計算が有効桁数を超える
部分を切り捨てまたは四捨五入して行なわれていること
から来るもので、この種の誤差を丸め誤差と呼ぶ。
打ちきり誤差はアルゴリズムに由来するもので、実例を
挙げたほうが分かりやすい。円周率の計算にシンプソンの
公式を当てはめることを考えてみよう。この場合、一般に
近似式の次数が増えるとそれだけ精度が上がる事が知られ
ているが、この種の計算の時は丸め誤差がないとしても
ズレが出る。これは次数を低くして計算を打ちきった事に
よるもので、この種の誤差を打ちきり誤差という。
(古い言い方です。round off error と cut off
error と英語で書くと分かりやすいのですがね。)
「FORTRAN77入門」倍風館 S62 第15版 105ページより
(ついでに言えば、”既出”です。前の2chサーバの時には
見かけました)
>>3 near pin 賞をさしあげましょう
丸め誤差っていうのは誤差に誤差がかぶって雪だるま式に誤差が 増える事だよ。 はじめ1桁の誤差だったのが計算が進むにつれ3桁の誤差になって いく。さらにすすむにつれ・・。まぁこんな感じ。
6 :
名無しさん@1周年 :2000/11/09(木) 21:59
そういやマシンεの計算法ってどうだっけ? 誰か教えて
7 :
>6 :2000/11/10(金) 03:16
8 :
名無しさん@1周年 :01/10/04 13:00
期待あげ
9 :
名無しさん@1周年 :01/10/07 14:04
10 :
名無しさん@1周年 :01/10/08 15:31
>5 ウソ言わないように。 丸め誤差は 0.1234567 +)0.0001234567 -------------- 0.1235801567 → 0.1235801 みたいにコンピュータの有効桁数を超えた数値が 丸められることを言います。
11 :
名無しさん@1周年 :01/10/08 20:11
削除依頼 理由 駄スレです。
12 :
名無しさん@1周年 :01/10/09 06:02
削除対象外です
13 :
名無しさん@1周年 :01/10/09 17:43
0.0000001 + 2.6034584 = 2.6034584 単精度でこの結果が出る。 なんで?
14 :
名無しさん@1周年 :01/10/09 21:36
/* 1/k*sqrt(k) ( 1 <= k <= MAX ) */ #include <stdio.h> #include <math.h> #define MAX 50000 float sum, dx; Int k; void purinto() { printf( "K = %5d,\n dx = %.50f,\n sum = %.30f\n", k, dx, sum ); } void operation() { dx = 1 / (k * sqrt(k)); sum += dx; if( k > 41270 ) { purinto(); } } void init( char* msg ) { sum = 0; puts( msg ); } int main( void ) { float before; init( "small --> big" ); before = 1; /* dummy input */ for( k = 1; k <= MAX, before != sum; k++ ) { before = sum; operation(); } return 0; }
数値解析の情報落ちの問題なんですけど、
>>14 の実行結果が納得できない・・・。
8桁目まで足してくれない(?)
16 :
名無しさん@1周年 :01/10/09 22:12
単精度だからじゃないのか
17 :
これのおかげで3日悩みました。 :01/10/10 13:31
//VC++6.0 #include "stdafx.h" void main(int argc, char* argv[]) { double d; d = 1.05-1.00-0.05; printf("1.05-1.00-0.05 = %lf ",d); if ( d != 0.0 ){ printf("って0じゃねぇぞ、ゴラァ`д´\n"); } }
18 :
BCBでやってみよう。 :01/10/10 13:54
>>17 //BC++B5 でやってみました。
//---------------------------------------------------------------------------
#include <stdio.h>
#pragma hdrstop
//---------------------------------------------------------------------------
#pragma argsused
void main(int argc, char* argv[])
{
double d;
d = 1.05-1.00-0.05;
printf("1.05-1.00-0.05 = %lf ",d);
if ( d != 0.0 ){
printf("って0じゃねぇぞ、ゴラァ`д´\n");
}
}
//---------------------------------------------------------------------------
1.05-1.00-0.05 = 0.000000 って0じゃねぇぞ、ゴラァ`д´
Press any key!
なるほどね。%gならOK(OKじゃないけど)
19 :
done under gcc :01/10/10 16:40
#include <stdio.h> main(int argc, char* argv[]) { float a[]={0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0}; double giko; int i; for(i=0;i<10;i++){ giko=(double)a[i]; printf(" %.20lf \n",giko); } }
>13 単精度の意味わかってる?
21 :
perlでやってみよう。 :01/10/11 10:28
>>17 #!/usr/bin/perl
# seido.pl
#
$d = 1.05-1.00-0.05;
printf ("1.05-1.00-0.05 = %f ",$d);
if ( $d != 0.0 ){
print ("って0じゃねぇぞ、ゴラァ`д´\n");
}
#--------------------------------------------------------
$ perl -v
This is perl, v5.6.1 built for cygwin
$ perl seido.pl
1.05-1.00-0.05 = 0.000000 って0じゃねぇぞ、ゴラァ`д´
22 :
名無しさん@1周年 :01/10/11 16:31
24 :
gccでやってみよう。 :01/10/12 10:23
>>17 $ cat seido.c
#include <stdio.h>
main()
{
double d;
d = 1.05-1.00-0.05;
printf("1.05-1.00-0.05 = %lf(%E) ",d,d);
if ( d != 0.0 ){
printf("tte zero ja naizo golar `o`\n");
}
}
$ gcc seido.c -o seido.exe
$ ./seido.exe
1.05-1.00-0.05 = 0.000000(4.163336E-17) tte zero ja naizo golar `o`
1.0 2.0 4.0 … または 0.5 0.25 0.125 … の組み合わせなら0になるかな? 22=13だとしたら。 まず教科書読んだほうがいいよ(w 1.1(有効桁数2桁)に0.010(有効桁数2桁)を足しました。答えは?
26 :
名無しさん@1周年 :01/10/13 12:32
1.1 float wa 6桁?
27 :
名無しさん@1周年 :01/10/13 19:17
コンパイラの最適化にもよるよね
28 :
名無しさん@1周年 :01/10/14 19:33
0.1 を2進数で表したら循環小数になるよねー。 1.05もそうだよね
近似誤差:例えば微分を差分で置き換えるなどの近似法に由来する誤差 打ち切り誤差:本当は長いあるいは無限に続く展開や近似項を有限で 止めて(打ち切って)近似することによる誤差。 例えばTaylor展開の最初のn項で止めるなどがこの例になる。 漸近展開などの場合も該当するかな。 入力誤差:入力されるデーター自身が固有に含んでいる誤差。 観測誤差のほか、入力の精度が有限であることからも生じる。 。。。
ガウスエルミートの公式について教えてください。
31 :
名無しさん@1周年 :02/01/09 07:16
数値分散も近似誤差の一種か。
保守
33 :
名無しさん@1周年 :03/01/02 17:09
保守
(^^)
(^^)
36 :
名無しさん@3周年 :03/03/22 14:20
現在、流体の数値計算をしている大学生です。 有限差分法を用いて、MAC法により流速・圧力を計算しています。 しかし、MAC法を用いていると、その数値計算誤差であるDIV(発散)が大きくなってしまい、 (10~0のオーダー)計算結果にいまいち信用が置けません。 複雑な流体計算をする場合はMAC法はあまり適さないのでしょうか? ちなみに計算対象は流体中に置かれた物体周りの流れ場の解析です。(非定常) 宜しくお願いします。
37 :
名無しさん@3周年 :03/03/23 07:12
MAC,SMAC,HSMAC,いずれもすばらしいアルゴリズムです. 計算が発散してしまうと言うことは,Dtが大きくなっていると考えるのが 一般的でしょう.
38 :
ネットdeDVD :03/03/23 11:14
40 :
名無しさん@3周年 :03/03/24 23:44
41 :
名無しさん@3周年 :03/03/25 13:20
>>37 「発散」は誤差による発散じゃなくて、速度の
ダイバージェンスの意味だろ
>>36 MACアルゴリズムに出てくる圧力のポアソン
方程式はどうやって解いてるの?
ちゃんと残差が小さくなるまで収束計算させてる?
(^^)
∧_∧ ( ^^ )< ぬるぽ(^^)
━―━―━―━―━―━―━―━―━[JR山崎駅(^^)]━―━―━―━―━―━―━―━―━―
__∧_∧_ |( ^^ )| <寝るぽ(^^) |\⌒⌒⌒\ \ |⌒⌒⌒~| 山崎渉 ~ ̄ ̄ ̄ ̄
∧_∧ ( ^^ )< ぬるぽ(^^)
∧_∧ ∧_∧ ピュ.ー ( ・3・) ( ^^ ) <これからも僕たちを応援して下さいね(^^)。 =〔~∪ ̄ ̄ ̄∪ ̄ ̄〕 = ◎――――――◎ 山崎渉&ぼるじょあ
(⌒V⌒) │ ^ ^ │<これからも僕を応援して下さいね(^^)。 ⊂| |つ (_)(_) 山崎パン
何だ?この板 記念に足跡を残しておこう
51 :
名無しさん@3周年 :04/08/29 22:51
有効桁12と言ったら、11桁までは真値に一致しているのが当然で、 ずれて良いのは最後の一桁だけ。 HPのは単に表示してるだけであってなんら精度に対する保証がない。 詐欺商品だろこれ。 Sin(π-0.01) Mathematicaによる正確な値40桁 0.009999833334166664682542438269099729038964 TI Voyage200(TI-89,TI-92etc) 0.0099998333341667 HP-49G 0.00999983333396 TI圧勝。TI完璧。 HPは総じて手抜き商品ですな。 いつどこでどうウソ付かれるか判ったもんじゃない。怖くて使えない。 ちなみに、Mathematicaで ArcSin[0.009999833334166664682542438269099729038964] =0.01000000000000000000000000000000000000000 なのでこの値は完璧ね。
52 :
名無しさん@3周年 :04/09/13 18:58:07
コンパイラが違うだけで 同じプログラムで同じ数値が入ってるのに IMSLのサブルーチンから全く違う値がかえってくるのはなぜ!?
53 :
LV仮面 :04/09/15 23:46:45
>22 以下、代表的な数値 整数 整数は、正または負の自然数です。 バイト(I8)バイト整数には8ビットの記憶容量があります。 ワード(I16)ワード整数には16ビットの記憶容量があります。 倍長(I32)倍長整数には32ビットの記憶容量があります。通常は、32ビット整数を使用します。 符号なし整数 符号なし整数は負でない整数のみを表し、符号付き整数よりも広い範囲の正の数を持ちます。これは、どちらの表記法でもビット数は同じであるためです。 バイト(U8) 符号なしバイト整数には8ビットの記憶容量があります。 ワード(U16) 符号なしワード整数には16ビットの記憶容量があります。 倍長(U32) 符号なし倍長整数には32ビットの記憶容量があります。 浮動小数点数 単精度(SGL)?倍精度浮動小数点数は32ビットIEEE倍精度形式です。メモリ節約が重要となる場合に単精度浮動小数点数を使用すると、数値の範囲のオーバーフローを防ぐことができます。 倍精度(DBL)?倍精度浮動小数点数は64ビットIEEE倍精度形式です。 拡張精度(EXT)?拡張精度の数値をディスクに保存する場合は、プラットフォームに依存しない128ビット形式で保存されます。これは、Sunのインメモリフォーマットと同じです。メモリでは、サイズと精度はプラットフォームによって異なります。
∧_∧ ∧_∧ ピュ.ー ( ・3・) ( ^^ ) <これからも僕たちを応援して下さいね(^^)。 =〔~∪ ̄ ̄ ̄∪ ̄ ̄〕 = ◎――――――◎ 山崎渉&ぼるじょあ
...これからも僕を応援して下さいね(^^)。 ━―━―━―━―━―━―━―━―━[JR山崎駅(^^)]━―━―━―━―━―━―━―━―━― ∧_∧ ピュ.ー ( ^^ ) <これからも僕を応援して下さいね(^^)。 =〔~∪ ̄ ̄〕 = ◎――◎ 山崎渉 __∧_∧_ |( ^^ )| <寝るぽ(^^) |\⌒⌒⌒\ \ |⌒⌒⌒~| 山崎渉 ~ ̄ ̄ ̄ ̄ ∧_∧ ( ^^ )< ぬるぽ(^^) (⌒V⌒) │ ^ ^ │<これからも僕を応援して下さいね(^^)。 ⊂| |つ (_)(_) 山崎パン ∧_∧ ∧_∧ ピュ.ー ( ・3・) ( ^^ ) <これからも僕たちを応援して下さいね(^^)。 =〔~∪ ̄ ̄ ̄∪ ̄ ̄〕 = ◎――――――◎ 山崎渉&ぼるじょあ
56 :
名無しさん@3周年 :05/02/24 16:29:23
●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●不合格●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● これを見た人は確実に【不合格】になります。どこかに3回コピペすれば回避できます。 これは本当です。やらないと一年無駄になります. (体験者の話) 私も最初は嘘だと思ったんですが、一応コピペ3回しました。それでセンターで 私大に合格出来ました。 けどコピペしなかった友達がA判定だったのに、 落ちたんです。(慶應義塾大合格h.sさん) 俺はもうE判定で記念受験のつもりだったんだけど、コピペ10回くらいした途端に 過去問が スラスラ解けるようになって、 なんと早稲田に受かりました。(早稲田大3学部合格r.kくん) ぼくなんて底辺高校で完全に人生諦めていました。Fランクにも入れないって 言われていたんです。ところが色んなところにコピペした翌日、合格通知が 届いたんです。(法政大合格m.tくん)
57 :
名無しさん@3周年 :05/02/24 19:34:51
ウホッ 長寿スレ!
59 :
:2005/07/07(木) 20:31:04
長寿スレって事か… 馬鹿には見えないスレットじゃないのね、、
60 :
名無しさん@3周年 :2005/07/30(土) 22:35:39
あと桁落ちってのもあるね。 1000000000 + 0.000000001 = 1000000000 で、数値計算で初期条件が全く同じならば、積極的でも消極的にでも乱数を導入しなければ 何回やっても同じ結果になるんだっけ?
あけおめ
63 :
名無しさん@5周年 :2006/02/28(火) 15:58:45
double left, right; ここの処理で left と right は近接した値になる。 double diff = ( right - left ) * 0.5; double midle = left + diff; right-left が小さいと diff も小さくなって middle == left になることは予想していたのですが middle == right になることもあるんですね… なんでだろう。
2進3bit精度 left =1.01 right=1.10 diff=0.001 left'=1.011 = 1.10 (round to nearest もしくは round to +inf)
65 :
名無しさん@5周年 :2006/03/09(木) 08:07:30
ちょうど真ん中の時 +inf 方向に丸められるか -inf 方向に丸められるかは ランタイムもしくはプロセッサ依存ですか? Numerical Recipes in C の二分法による解の探索アルゴリズムでは 中点を left と比較して同じなら停止するように書かれていて 停止しないことがあって、なんでこんな停止条件になっているのか 不思議に思ってました。
Numerical Recipesは間違い多いらしいから 信用しすぎない方がいい IEEE754規定の丸めモードは round to zero round to nearest round to +inf round to -inf がある。 標準がround to nearestで たいていランタイムに変更できる。 ia32系だと fpu_control.h のマクロを使って変更する。 でも、コンパイラによってはうまく反映しない場合も。
67 :
名無しさん@5周年 :2006/06/24(土) 10:43:03
数値解析の大切さを認識して貰う為には、ぜひとも倍精度の使用を法律で 禁止して貰おう。もちろんソフトウェアで多倍長演算をすることも禁じるべきだ。 そうして、32ビット浮動小数点数はおろか、16ビット浮動小数点数とか、 8ビット浮動小数点数などを採用し、あるいは固定小数点数を復活して それで計算をすることを強いれば、誤差の分析や解析の重要性が高まり、 数値解析の必要性が広く理解され認識されるのではないか? 高精度数は撲滅して、可能な限りの低精度計算で済ませることを競う べきでは?
68 :
名無しさん@5周年 :2006/06/26(月) 20:04:40
保守
70 :
名無しさん@5周年 :2007/05/08(火) 14:04:53
誤差の話はタブーです。絨毯の裏側に隠すべきです。そのことを口にしては なりません。裏山の桜の木の下に何が埋まっているかということを尋ねたもの はその答えを知ることになるでしょう。
71 :
原巨人人気&プロ野球人気両方とも人気上昇中 :2007/05/10(木) 11:37:30
誤差の話は何でタブーなんですか? なんかやましい事実があるんでしょうか?
72 :
かまち :2007/05/23(水) 05:36:41
誤差の話に触れてはいかん 俺みたいになるよww
73 :
名無しさん@5周年 :2007/05/23(水) 08:54:05
>>73 これはBCDのことを言ってるのか?
IA-32でもBCD演算命令はあるはずだが。
75 :
名無しさん@5周年 :2007/05/26(土) 17:43:24
整数演算じゃなくて、IEEEの浮動小数点規格合致の ハードウェアレベルでの10進演算命令だよ。
76 :
名無しさん@5周年 :2007/05/26(土) 23:03:01
倍精度固定小数点演算ってどう? 国家レベルの特許法犯罪?
77 :
名無しさん@5周年 :2007/06/02(土) 10:03:48
★★★★★★極秘情報★★★★★★★ (1)MULU/MULS/MSMU/MSMS/MRDU/MRDS (2)MUL1/MRD2/MSM1A…
78 :
名無しさん@5周年 :2007/06/15(金) 23:26:02
あるページにボタンがあります。 1クリックあたり、1万円が、あなたの通帳に振り込まれます。 そして、1クリックあたり、あなたではない誰かが一人、 あなたのクリックの作用によって、世界の何処かで死にます。 クリックしますか?
┌───┐
│\‖/│ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
│● ● │<
>>78 そんなもんあるわけないだろ!
│ ⊂⊃ │ \_____________
└───┘
80 :
名無しさん@5周年 :2008/07/02(水) 19:00:26
IEEE754
83 :
名無しさん@5周年 :2009/01/29(木) 02:34:40
ieee754がIBM方式より優れている点はどこですか?教えてください
84 :
名無しさん@5周年 :2009/02/22(日) 00:18:24
>>77 (1)符号付符号なし選択可能な乗算命令
(2)シフト付き乗算命令
>>1 >2000/05/20(土) 09:30
ポカーン
88 :
ころも :2009/08/31(月) 22:07:09
皆さん、こんばんわ。ベナ-ル流れを解きたいとおもっています。 よく、教科書に記述されている渦度-流れ関数の方程式は、 d/dx(Zdψ/dy)-d/dy(Zdψ/dx)=d/dx(dZ/dx)+d/dy(dZ/dy)+Grdθ/dx Z) 渦度、 ψ) 流れ関数、Gr) グラスホフ数、θ)温度 です。 これをどのように差分化したらよいでしょうか?よい考えがありましたら、教えて下さい。
89 :
名無しさん@5周年 :2009/09/03(木) 01:14:01
吹いた
90 :
名無しさん@5周年 :2010/03/05(金) 01:45:40
91 :
名無しさん@5周年 :
2010/05/23(日) 04:41:24 誤差のことに興味を持っても、周囲は誤差には関心が無い、 そうして誤差のことをやっていても、結局最後は丸められるか切り捨てられて しまうことになる。まったく割り切れないよ。