Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Floating point error

  1. Oct 10, 2008 #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
     
  2. jcsd
  3. Oct 10, 2008 #2
    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.
     
  4. Oct 10, 2008 #3
    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.
     
  5. Oct 10, 2008 #4

    Borek

    User Avatar

    Staff: 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.
     
  6. Oct 10, 2008 #5
    I did that. The loop is not stopping after x2=0.4, why is break not working?
     
  7. Oct 10, 2008 #6

    Borek

    User Avatar

    Staff: Mentor

    Try if (x>=0.4).
     
  8. Oct 10, 2008 #7
    Yes, it works now.

    Was this the problem?

    Thank you.
     
  9. Oct 10, 2008 #8

    Borek

    User Avatar

    Staff: Mentor

    As you see. Generally you can't compare floats with x==y, rather with abs(x-y)<treshold.
     
  10. Oct 10, 2008 #9
    I'll keep this in mind from now on. Thank you for the time and effort you put into this.
     
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook

Have something to add?



Similar Discussions: Floating point error
  1. Matlab floating point (Replies: 6)

  2. Floating point numbers. (Replies: 18)

Loading...