1. 程式人生 > >浮點數的精度問題

浮點數的精度問題

在生活中解決實際問題時,存在誤差是在所難免的,當然,浮點型別的數也存在誤差,當 遇到float,double和整型數比較大小時,並不僅僅時簡單的將兩個數放在一起比較了。要考慮到誤差。

例如 : 求 ax^2+bx+c=0 的實根

程式碼:

#include <stdio.h>
#include <math.h>
#define EPS 0.00000001 //誤差

void   Fun(  double a,double b, double c)
{
         double x1;
        double x2;
        double m = b*b-4*a*c;
   

 
if( -EPS <= a && a <=EPS)  //a==0
   {
     printf("%f \n",-c/b);
   }
 else if  ( m >= EPS) //m>=0
     {
      x1=-b+sqrt(m)/(2*a);
      x2=-b-sqrt(m)/(2*a);

     printf("%f   %f \n",x1,x2);
     }
else if( m<-EPS)  //m<0
    {
      printf("無實根\n");
    }
}

int main()
{
        Fun(2, 4,2);
        Fun(2, 3,2);

        return 0;
}

在這個題中,a,b,c,都是浮點型別的數,當判斷a是否等於0時,就不能直接寫成 a==0,
因此我們定義 EPS表示誤差 ,與0的比較如下圖所示;
在這裡插入圖片描述