
Практикум по программированию на языке С,
Вычислительная физика, Теория алгоритмов.
ФНБИК МФТИ
2015-2016 учебный год
1 #include<stdio.h>
2 #include<math.h>
3 #define PI 3.1415926535897932
4 double SolveEquation(double left, double right, double accuracy,
5 double ( *fpointer) ( double x) );
6 int main(void){
7 double f ( double x);
8
9 double left=0.;
10 double right=PI/2.;
11 double accuracy=1.e-16;
12 double (* FunctionPointer) (double x)=f;
13
14 double res;
15 res=SolveEquation(left, right, accuracy, FunctionPointer);
16 printf("The root of the equation is %.16f\n",res/PI*180.);
17 }
18
19 double SolveEquation
20 (double left, double right, double accuracy,
21 double (* fpointer) ( double x)){
22
23 double middle, old_middle;
24 middle=0.5*(left+right);
25
26 do {
27 old_middle=middle;
28 if( fpointer(left)*fpointer(old_middle) < 0) right=old_middle;
29 else left=old_middle;
30
31 middle=0.5*(left+right);
32 } while(fabs(middle - old_middle) >= accuracy);
33
34 return middle;
35 }
36
37 double f ( double x){
38 return sin(x)-0.5;
39 }