# Floating point error

This is a program to slove differential equation using fourth order Runge-Kutta method. The question is dy/dx=x2+y2
when y(0)=0, h=0.2
find y(0.4) (Ans= 0.021360)

#include<stdio.h>
#include<conio.h>
float f(float x, float y)
{
return (x*x+y*y);
}
void main()
{
float x1,y1,x2,y2,h=0.2,m1,m2,m3,m4;
clrscr();
printf("Enter the initial values of x and y\n");
scanf("%f%f",&x1,&y1);
while(1)
{
m1=f(x1,y1);
m2=f(x1+h/2,y1+(m1*h)/2);
m3=f(x1+h/2,y1+(m2*h)/2);
m4=f(x1+h,y1+m3*h);
y2=y1+(h/6)*(m1+(2*m2)+(2*m3)+m4);
x2=x1+h;
if(x2==0.4)
break;
else
{
x1=x2;
y1=y2;
}
}
printf("The value of y at x= 0.4 is %f\n",y2);
getch();
}

However this program is not working and giving the message Abnormal value: Floating point overflow. Can anyone please find out the error in this?
Thanks

Related Programming and Computer Science News on Phys.org
right away i notice that you will never get out of that while(1) loop unless x2==0.4
is that guaranteed to happen for every possible input?
if not, you've got an infinite loop. bad.

No, it will only be satisfied for this particular question, i.e. initial value of x=0, h=0.2.
It's not a very good program but it should work at least for this case, which it is not doing.

Borek
Mentor
These are float values, chances that x2 will be EXACTLY 0.4 are slim.

You should get information about the line where the error occurs. If you don't have a debugger that will let you trace code step by step, put something like printf("x2 = %f\n") into code to see how x2 values change. You may check every variable this way.

I did that. The loop is not stopping after x2=0.4, why is break not working?

Borek
Mentor
Try if (x>=0.4).

Yes, it works now.

These are float values, chances that x2 will be EXACTLY 0.4 are slim.

Thank you.

Borek
Mentor