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 |
| 著作者 | 紀平拓男・春日伸弥 |
| 出版社 | ソフトバンク パブリッシング株式会社 |