# Bisection method by c

1. Feb 7, 2009

### swty todd

here is the c program for arriving at a solution using bisection method.
The ouputi s going infinte..pls help ....i think it has more of syntax errors than logical errors...

Code (Text):

main()
{
float a,b,c,x1,x2,x,series;
double d;

printf("enter a,b,c and x1(pos) & x2(neg)");
scanf("%f%f%f%f%f", &a, &b, &c, &x1, &x2);

x = (x1 + x2) / 2;
series = a * x * x + b * x + c;
d = fabs(series);

if (d > 0.0001)
{
if (x * x1 < 0)
x = x2;
else
x = x1;

}
else
{
printf("ans=%f", x);
}

return 0;
}

Last edited: Feb 7, 2009
2. Feb 7, 2009

Code (Text):
Arf!

3. Feb 7, 2009

### Potential

You will probably get some help faster my learning to format code so someone can read it.

Code (Text):

main()
{
float a,b,c,x1,x2,x,series;
double d;

printf("enter a,b,c and x1(pos) & x2(neg)");
scanf("%f%f%f%f%f", &a, &b, &c, &x1, &x2);

x = (x1 + x2) / 2;
series = a * x * x + b * x + c;
d = fabs(series);

if (d > 0.0001)
{
if (x * x1 < 0)
x = x2;
else
x = x1;

}
else
{
printf("ans=%f", x);
}

return 0;
}

4. Feb 7, 2009

### swty todd

okkk
sry but thnx...

5. Feb 7, 2009

### rcgldr

Note that you reassign x each time at "read:" so the if statement assignements have no effect. I'm not famliar with the algorithm, but you probably should be assigning x1 or x2 in your if statement:

x=(x1+x2)/2;
...
if (x*x1<0) x2=x ; else x1=x;

Would have been nice if the previous posts offered some constructive help.

6. Feb 7, 2009

### swty todd

thnx.....i will try my best...

7. Feb 7, 2009

### shoehorn

It would be even nicer if you decided to keep your opinions on earlier posts to yourself.

8. Feb 7, 2009

### swty todd

yeah...dude and guess what ...it would be much more nicer if u followed what u preach

9. Feb 7, 2009

### swty todd

i edited my code..bt still isnt workin..wld b glad 2 recive ur help

Code (Text):

#include<stdio.h>
#include<math.h>
main()
{float a,b,c,x1,x2,x,series;
double d;

printf("enter a,b,c and x1(pos) & x2(neg)");
scanf("%f%f%f%f%f",&a,&b,&c,&x1,&x2);

x=0;
d=1;

while(d>0.0001)
{
x=(x1+x2)/2;

series=a*x*x+b*x+c;

d=fabs(series);

if(x*x1 < 0)
x2=x;
else
x1=x;
}

printf("ans=%f",x);

return 0;
}

10. Feb 8, 2009

### rcgldr

The if statement should multiply the function(x1) * function(x), not x1 and x themselves. Using a new variable called series1:

series = a*x*x + b*x + c;
series1 = a*x1*x1 + b*x1 + c;
...
if (series * series1) < 0) x2 = x; else x1 = x;
...

Also note that the initial values for x1 and x2 need to be chosen so that

a*x1*x1 + b*x1 + c > 0
a*x2*x2 + b*x2 + c < 0

A parabola would have to cross the x axis twice for this method to work, and there would be two possible answers. The initial values for x1 and x2 would have to chosen so that only one of the answers would occur in the range x1 .. x2.

Last edited: Feb 8, 2009
11. Feb 9, 2009

### swty todd

u r rite..series and series1 get multiplied and the main equation shld better not b quadratic..thnx...