Floating point error

  • Thread starter Vagrant
  • Start date
  • #1
195
1
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
 

Answers and Replies

  • #2
240
1
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.
 
  • #3
195
1
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.
 
  • #4
Borek
Mentor
28,514
2,944
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.
 
  • #5
195
1
I did that. The loop is not stopping after x2=0.4, why is break not working?
 
  • #6
Borek
Mentor
28,514
2,944
Try if (x>=0.4).
 
  • #7
195
1
Yes, it works now.

These are float values, chances that x2 will be EXACTLY 0.4 are slim.
Was this the problem?

Thank you.
 
  • #8
Borek
Mentor
28,514
2,944
Was this the problem?
As you see. Generally you can't compare floats with x==y, rather with abs(x-y)<treshold.
 
  • #9
195
1
I'll keep this in mind from now on. Thank you for the time and effort you put into this.
 

Related Threads on Floating point error

Replies
8
Views
4K
  • Last Post
Replies
8
Views
885
  • Last Post
Replies
18
Views
5K
Replies
2
Views
1K
  • Last Post
Replies
5
Views
11K
Replies
1
Views
2K
Replies
7
Views
978
Replies
6
Views
794
  • Last Post
Replies
2
Views
3K
Replies
2
Views
7K
Top