C言語の倍精度実数型の精度は,およそ である.この精 度よりも大きさの差(絶対値)が小さい2つの実数の和と差の演算はできない.加算や減算 を行っても,その小さい値は無視される.これを情報落ちと言う.
三角関数を計算する場合,以下のような級数を使う.
(5) |
実際の数値計算は, であるような2点 から出発する. そして,区間 を2分する点 に対して, を計算を行う. ならば を と置き換え, ならば を と置き 換える.絶えず,区間 の間に解があるようにするのである.この操作 を繰り返して,区間の幅 が与えられた値 よりも小さく なったならば,計算を終了する.解へ収束は収束率1/2の一次収束という.
リスト6に実際のプログラム例を示す.このプログラムと先の説明で用いた変数との対応は,次の通りである.
left
riht
mid
epsilon
1 #include <stdio.h> 2 #include <math.h> 3 #include <stdlib.h> 4 5 double func(double x) 6 { 7 return x*cos(x)+sin(x)+exp(-x*x)+x*x-x-3; 8 } 9 10 11 double BinarySearch(void) 12 { 13 double left,mid,right,epsilon; 14 15 epsilon=0.00001; 16 17 left=-2.0; 18 right=2.0; 19 20 while(fabs(right-left)>epsilon) 21 { 22 mid=(left+right)/2.0; 23 24 if(func(left)*func(mid)>=0.0) 25 left=mid; 26 else 27 right=mid; 28 } 29 return left; 30 } 31 32 int main(void) 33 { 34 double d; 35 d=BinarySearch(); 36 printf("方程式の解は%lf," 37 "そのときのfunc(x)は%lfです。\n",d,func(d)); 38 return EXIT_SUCCESS; 39 }
[転載について]
このページ中のリスト6のプログラムは,教科書として使用している以下の書籍
書名 | プログラミングの宝箱 アルゴリズムとデータ構造 ISBN4-7973-2419-8 |
著作者 | 紀平拓男・春日伸弥 |
出版社 | ソフトバンク パブリッシング株式会社 |