数値計算の誤差
■ このスレッドは過去ログ倉庫に格納されています
0001びぎなあ
NGNG丸め誤差って何ですか? 打ち切り誤差って何ですか? よく分らないのです。
他に知っておかなければならない誤差にはどんなのがありますか?
どなたか、例を用いて教えてください。 よろしくお願いします。
0002こういう基本的な事は
NGNG0003名無しさん@1周年
NGNG打ち切り誤差: 混むピューターの扱える数字は有限桁です。例えば、1,2,3,4.11,
19.193847459,0.100083, etc。従って、1/3 は0.333333......
のどこかで切れてしまいます, 例えば0.3333。どこで切れるかは
精度の問題でこれが単精度、倍精度などと言われるものです。
と言う訳で、この切れてしまった部分を打ち切り誤差と言います。
丸め誤差: 。。。。。。。。。。。。。。。。。。。。。。。。。。。。?
0004丸め誤差と打ちきり誤差
NGNG結果にズレがある。これは単精度計算が有効桁数を超える
部分を切り捨てまたは四捨五入して行なわれていること
から来るもので、この種の誤差を丸め誤差と呼ぶ。
打ちきり誤差はアルゴリズムに由来するもので、実例を
挙げたほうが分かりやすい。円周率の計算にシンプソンの
公式を当てはめることを考えてみよう。この場合、一般に
近似式の次数が増えるとそれだけ精度が上がる事が知られ
ているが、この種の計算の時は丸め誤差がないとしても
ズレが出る。これは次数を低くして計算を打ちきった事に
よるもので、この種の誤差を打ちきり誤差という。
(古い言い方です。round off error と cut off
error と英語で書くと分かりやすいのですがね。)
「FORTRAN77入門」倍風館 S62 第15版 105ページより
(ついでに言えば、”既出”です。前の2chサーバの時には
見かけました)
>>3
near pin 賞をさしあげましょう
0005ハイバンド名無しさん
NGNG増える事だよ。
はじめ1桁の誤差だったのが計算が進むにつれ3桁の誤差になって
いく。さらにすすむにつれ・・。まぁこんな感じ。
0006名無しさん@1周年
NGNG誰か教えて
0007>6
NGNGhttp://www.asahi-net.or.jp/~UR6K-MR/fortran/fortran.htm
0008名無しさん@1周年
NGNG0009名無しさん@1周年
NGNG0010名無しさん@1周年
NGNGウソ言わないように。
丸め誤差は
0.1234567
+)0.0001234567
--------------
0.1235801567 → 0.1235801
みたいにコンピュータの有効桁数を超えた数値が
丸められることを言います。
0011名無しさん@1周年
NGNG理由
駄スレです。
0012名無しさん@1周年
NGNG0013名無しさん@1周年
NGNG2.6034584 =
2.6034584
単精度でこの結果が出る。
なんで?
0014名無しさん@1周年
NGNG1/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;
}
001513
NGNG>>14
の実行結果が納得できない・・・。
8桁目まで足してくれない(?)
0016名無しさん@1周年
NGNG0017これのおかげで3日悩みました。
NGNG#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");
}
}
0018BCBでやってみよう。
NGNG//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じゃないけど)
0019done under gcc
NGNGmain(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);
}
}
0020名無しさん@1周年
NGNG単精度の意味わかってる?
0021perlでやってみよう。
NGNG#!/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じゃねぇぞ、ゴラァ`д´
0022名無しさん@1周年
NGNGわかってません。
0023111
NGNG0024gccでやってみよう。
NGNG$ 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`
0025名無しさん@1周年
NGNGまたは
0.5 0.25 0.125 …
の組み合わせなら0になるかな?
22=13だとしたら。
まず教科書読んだほうがいいよ(w
1.1(有効桁数2桁)に0.010(有効桁数2桁)を足しました。答えは?
0026名無しさん@1周年
NGNGfloat wa 6桁?
0027名無しさん@1周年
NGNG0028名無しさん@1周年
NGNG1.05もそうだよね
0029
NGNG打ち切り誤差:本当は長いあるいは無限に続く展開や近似項を有限で
止めて(打ち切って)近似することによる誤差。
例えばTaylor展開の最初のn項で止めるなどがこの例になる。
漸近展開などの場合も該当するかな。
入力誤差:入力されるデーター自身が固有に含んでいる誤差。
観測誤差のほか、入力の精度が有限であることからも生じる。
。。。
0030かおなし
NGNG0031名無しさん@1周年
NGNG0032名無しさん@1周年
NGNG0033名無しさん@1周年
NGNG0034山崎渉
NGNG0035山崎渉
NGNG0036名無しさん@3周年
NGNG有限差分法を用いて、MAC法により流速・圧力を計算しています。
しかし、MAC法を用いていると、その数値計算誤差であるDIV(発散)が大きくなってしまい、
(10~0のオーダー)計算結果にいまいち信用が置けません。
複雑な流体計算をする場合はMAC法はあまり適さないのでしょうか?
ちなみに計算対象は流体中に置かれた物体周りの流れ場の解析です。(非定常)
宜しくお願いします。
0037名無しさん@3周年
NGNG計算が発散してしまうと言うことは,Dtが大きくなっていると考えるのが
一般的でしょう.
0038ネットdeDVD
NGNGhttp://www.net-de-dvd.com/
↓↓ 特売品は、なんと一枚600円!! ↓↓
http://www.net-de-dvd.com/
↓↓ 数に限りあり!早いもの勝ち。急げ ↓ ↓
http://www.net-de-dvd.com/
0039名無しさん@3周年
NGNGそう思いのあなた!
http://www5e.biglobe.ne.jp/~rgxt5nl/index.htmlのページをお試しください!
100種類のタダで遊べるゲームに、
おもしろいパクリ物を集めたコーナーや、
管理人がすぐに素材にしてくれる素材掲示板
ほかにも、2ちゃん掲示板もありますよ!
自作フラッシュもあります。
とにかくいろんなコンテンツが豊富です!
常連になってくれる人大募集!
0040名無しさん@3周年
NGNGhttp://human.2ch.net/test/read.cgi/wom/1047988677/l58
162 :名無しさん :03/03/24 07:12 ID:I/am/god
>>159
なんか悲しいね。
独特のチープさと独特のノリがなんとも言えず好き。
ちなみに発掘した根本なんかには感謝してる。
163 :名無しさん :03/03/24 07:13 ID:ARu0ZBDd
>>162 さりげなくIDが神だな
164 :名無しさん :03/03/24 07:13 ID:I/am/god
本当だ・・・気が付かなかった。
0041名無しさん@3周年
NGNG神 の ホ ー ム ペ ー ジ
http://mypage.naver.co.jp/2ko657ih/
0042名無しさん@3周年
NGNG「発散」は誤差による発散じゃなくて、速度の
ダイバージェンスの意味だろ
>>36
MACアルゴリズムに出てくる圧力のポアソン
方程式はどうやって解いてるの?
ちゃんと残差が小さくなるまで収束計算させてる?
0043山崎渉
NGNG0044山崎渉
NGNG( ^^ )< ぬるぽ(^^)
0045山崎渉
NGNG0046山崎 渉
NGNG__∧_∧_
|( ^^ )| <寝るぽ(^^)
|\⌒⌒⌒\
\ |⌒⌒⌒~| 山崎渉
~ ̄ ̄ ̄ ̄
0047山崎 渉
NGNG( ^^ )< ぬるぽ(^^)
0048ぼるじょあ ◆yBEncckFOU
NGNGピュ.ー ( ・3・) ( ^^ ) <これからも僕たちを応援して下さいね(^^)。
=〔~∪ ̄ ̄ ̄∪ ̄ ̄〕
= ◎――――――◎ 山崎渉&ぼるじょあ
0049山崎 渉
NGNG│ ^ ^ │<これからも僕を応援して下さいね(^^)。
⊂| |つ
(_)(_) 山崎パン
0050名無しさん@3周年
NGNG記念に足跡を残しておこう
0051名無しさん@3周年
NGNGずれて良いのは最後の一桁だけ。
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
なのでこの値は完璧ね。
0052名無しさん@3周年
NGNG同じプログラムで同じ数値が入ってるのに
IMSLのサブルーチンから全く違う値がかえってくるのはなぜ!?
0053LV仮面
NGNG以下、代表的な数値
整数
整数は、正または負の自然数です。
バイト(I8)バイト整数には8ビットの記憶容量があります。
ワード(I16)ワード整数には16ビットの記憶容量があります。
倍長(I32)倍長整数には32ビットの記憶容量があります。通常は、32ビット整数を使用します。
符号なし整数
符号なし整数は負でない整数のみを表し、符号付き整数よりも広い範囲の正の数を持ちます。これは、どちらの表記法でもビット数は同じであるためです。
バイト(U8) 符号なしバイト整数には8ビットの記憶容量があります。
ワード(U16) 符号なしワード整数には16ビットの記憶容量があります。
倍長(U32) 符号なし倍長整数には32ビットの記憶容量があります。
浮動小数点数
単精度(SGL)?倍精度浮動小数点数は32ビットIEEE倍精度形式です。メモリ節約が重要となる場合に単精度浮動小数点数を使用すると、数値の範囲のオーバーフローを防ぐことができます。
倍精度(DBL)?倍精度浮動小数点数は64ビットIEEE倍精度形式です。
拡張精度(EXT)?拡張精度の数値をディスクに保存する場合は、プラットフォームに依存しない128ビット形式で保存されます。これは、Sunのインメモリフォーマットと同じです。メモリでは、サイズと精度はプラットフォームによって異なります。
0054ぼるじょあ ◆yBEncckFOU
NGNGピュ.ー ( ・3・) ( ^^ ) <これからも僕たちを応援して下さいね(^^)。
=〔~∪ ̄ ̄ ̄∪ ̄ ̄〕
= ◎――――――◎ 山崎渉&ぼるじょあ
0055山.崎 渉
05/02/22 21:05:42━―━―━―━―━―━―━―━―━[JR山崎駅(^^)]━―━―━―━―━―━―━―━―━―
∧_∧
ピュ.ー ( ^^ ) <これからも僕を応援して下さいね(^^)。
=〔~∪ ̄ ̄〕
= ◎――◎ 山崎渉
__∧_∧_
|( ^^ )| <寝るぽ(^^)
|\⌒⌒⌒\
\ |⌒⌒⌒~| 山崎渉
~ ̄ ̄ ̄ ̄
∧_∧
( ^^ )< ぬるぽ(^^)
(⌒V⌒)
│ ^ ^ │<これからも僕を応援して下さいね(^^)。
⊂| |つ
(_)(_) 山崎パン
∧_∧ ∧_∧
ピュ.ー ( ・3・) ( ^^ ) <これからも僕たちを応援して下さいね(^^)。
=〔~∪ ̄ ̄ ̄∪ ̄ ̄〕
= ◎――――――◎ 山崎渉&ぼるじょあ
0056名無しさん@3周年
05/02/24 16:29:23●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●
●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●
●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●
●●●●●●●●●●●●●●●●不合格●●●●●●●●●●●●●●●●●
●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●
●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●
●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●
●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●
●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●
これを見た人は確実に【不合格】になります。どこかに3回コピペすれば回避できます。
これは本当です。やらないと一年無駄になります.
(体験者の話)
私も最初は嘘だと思ったんですが、一応コピペ3回しました。それでセンターで
私大に合格出来ました。 けどコピペしなかった友達がA判定だったのに、
落ちたんです。(慶應義塾大合格h.sさん)
俺はもうE判定で記念受験のつもりだったんだけど、コピペ10回くらいした途端に
過去問が スラスラ解けるようになって、
なんと早稲田に受かりました。(早稲田大3学部合格r.kくん)
ぼくなんて底辺高校で完全に人生諦めていました。Fランクにも入れないって
言われていたんです。ところが色んなところにコピペした翌日、合格通知が
届いたんです。(法政大合格m.tくん)
0057名無しさん@3周年
05/02/24 19:34:510058名無しさん@3周年
2005/07/07(木) 15:24:190060名無しさん@3周年
2005/07/30(土) 22:35:391000000000 + 0.000000001 = 1000000000
で、数値計算で初期条件が全く同じならば、積極的でも消極的にでも乱数を導入しなければ
何回やっても同じ結果になるんだっけ?
0061名無しさん@5周年
2005/12/07(水) 22:50:200063名無しさん@5周年
2006/02/28(火) 15:58:45ここの処理で left と right は近接した値になる。
double diff = ( right - left ) * 0.5;
double midle = left + diff;
right-left が小さいと diff も小さくなって
middle == left になることは予想していたのですが
middle == right になることもあるんですね…
なんでだろう。
0064名無しさん@5周年
2006/03/09(木) 07:50:24left =1.01
right=1.10
diff=0.001
left'=1.011 = 1.10 (round to nearest もしくは round to +inf)
0065名無しさん@5周年
2006/03/09(木) 08:07:30ランタイムもしくはプロセッサ依存ですか?
Numerical Recipes in C の二分法による解の探索アルゴリズムでは
中点を left と比較して同じなら停止するように書かれていて
停止しないことがあって、なんでこんな停止条件になっているのか
不思議に思ってました。
0066名無しさん@5周年
2006/03/09(木) 17:56:07信用しすぎない方がいい
IEEE754規定の丸めモードは
round to zero
round to nearest
round to +inf
round to -inf
がある。
標準がround to nearestで
たいていランタイムに変更できる。
ia32系だと
fpu_control.h
のマクロを使って変更する。
でも、コンパイラによってはうまく反映しない場合も。
0067名無しさん@5周年
2006/06/24(土) 10:43:03禁止して貰おう。もちろんソフトウェアで多倍長演算をすることも禁じるべきだ。
そうして、32ビット浮動小数点数はおろか、16ビット浮動小数点数とか、
8ビット浮動小数点数などを採用し、あるいは固定小数点数を復活して
それで計算をすることを強いれば、誤差の分析や解析の重要性が高まり、
数値解析の必要性が広く理解され認識されるのではないか?
高精度数は撲滅して、可能な限りの低精度計算で済ませることを競う
べきでは?
0068名無しさん@5周年
2006/06/26(月) 20:04:40やーい
バーカバーカ
0069名無しさん@5周年
2007/02/24(土) 07:43:250070名無しさん@5周年
2007/05/08(火) 14:04:53なりません。裏山の桜の木の下に何が埋まっているかということを尋ねたもの
はその答えを知ることになるでしょう。
0071原巨人人気&プロ野球人気両方とも人気上昇中
2007/05/10(木) 11:37:30なんかやましい事実があるんでしょうか?
0072かまち
2007/05/23(水) 05:36:41俺みたいになるよww
0073名無しさん@5周年
2007/05/23(水) 08:54:05http://pc.watch.impress.co.jp/docs/2007/0522/ibm.htm
0075名無しさん@5周年
2007/05/26(土) 17:43:24ハードウェアレベルでの10進演算命令だよ。
0076名無しさん@5周年
2007/05/26(土) 23:03:01国家レベルの特許法犯罪?
0077名無しさん@5周年
2007/06/02(土) 10:03:48(1)MULU/MULS/MSMU/MSMS/MRDU/MRDS
(2)MUL1/MRD2/MSM1A…
0078名無しさん@5周年
2007/06/15(金) 23:26:021クリックあたり、1万円が、あなたの通帳に振り込まれます。
そして、1クリックあたり、あなたではない誰かが一人、
あなたのクリックの作用によって、世界の何処かで死にます。
クリックしますか?
0079名無しさん@5周年
2007/09/30(日) 12:40:53┌───┐
│\‖/│ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
│● ● │<>>78そんなもんあるわけないだろ!
│ ⊂⊃ │ \_____________
└───┘
0080名無しさん@5周年
2008/07/02(水) 19:00:260081名無しさん@5周年
2008/07/04(金) 04:32:310082名無しさん@5周年
2008/12/07(日) 19:45:240083名無しさん@5周年
2009/01/29(木) 02:34:400084名無しさん@5周年
2009/02/22(日) 00:18:24(1)符号付符号なし選択可能な乗算命令
(2)シフト付き乗算命令
0085名無しさん@5周年
2009/04/29(水) 01:54:490086名無しさん@5周年
2009/05/24(日) 17:55:390088ころも
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) グラスホフ数、θ)温度 です。
これをどのように差分化したらよいでしょうか?よい考えがありましたら、教えて下さい。
0089名無しさん@5周年
2009/09/03(木) 01:14:010090名無しさん@5周年
2010/03/05(金) 01:45:40クソして寝ろ
0091名無しさん@5周年
2010/05/23(日) 04:41:24そうして誤差のことをやっていても、結局最後は丸められるか切り捨てられて
しまうことになる。まったく割り切れないよ。
■ このスレッドは過去ログ倉庫に格納されています