Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<math.h>
- #include<stdio.h>
- long double f(long double x) {
- long double sum=1-x, term=-x;
- int n=2;
- while(1+term != 1) {
- term *= -x/(n*n); sum += term;
- if( ((n%2==0)?sum:-sum) < 0 ) break;
- n++;
- }
- printf("nf(% .8Lf,[%2d])=% .8Lf (f(...,[%2d])=% .8Lf)", x,n,sum,n-1,sum-term);
- return sum;
- }
- int main(void) {
- const int dp = 5;
- long double eps=0.5*powl(10,-dp);
- int i=0;
- long double a=0, fa = f(a);
- long double b=2, fb = f(b);
- if(signbit(fb)==signbit(fa)) {
- printf("Warning, initial values do not have opposite sign!n");
- }
- do {
- long double c=(a*fb-b*fa)/(fb-fa), fc = f(c);
- if( signbit(fc)!=signbit(fa) ) {
- b=a; fb=fa;
- a=c; fa=fc;
- } else {
- a=c; fa=fc;
- fb *= 0.5;
- }
- i++;
- } while(fabsl(b-a)>eps);
- printf("ngoal reached after %d iterationsn",i);
- return 0;
- }
- f( 0.00000000,[ 2])= 1.00000000 (f(...,[ 1])= 1.00000000)
- f( 2.00000000,[ 4])=-0.19444444 (f(...,[ 3])=-0.22222222)
- f( 1.67441860,[ 4])=-0.09025591 (f(...,[ 3])=-0.10390280)
- f( 1.53580328,[ 4])=-0.03709625 (f(...,[ 3])=-0.04675498)
- f( 1.42972818,[ 3])= 0.00012083 (f(...,[ 2])= 0.08130249)
- f( 1.43007256,[ 5])= 0.00680985 (f(...,[ 4])= 0.00722521)
- f( 1.45846639,[ 4])=-0.00500612 (f(...,[ 3])=-0.01286142)
- f( 1.44643666,[ 6])=-0.00027582 (f(...,[ 5])=-0.00029349)
- f( 1.44521038,[ 5])= 0.00023604 (f(...,[ 4])= 0.00067386)
- f( 1.44577586,[ 7])= 0.00000890 (f(...,[ 6])= 0.00000942)
- f( 1.44581590,[ 6])=-0.00000787 (f(...,[ 5])=-0.00002549)
- f( 1.44579710,[ 8])=-0.00000026 (f(...,[ 7])=-0.00000028)
- f( 1.44579591,[ 7])= 0.00000024 (f(...,[ 6])= 0.00000076)
- goal reached after 11 iterations
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement