浮點數的精度問題
阿新 • • 發佈:2018-11-10
在生活中解決實際問題時,存在誤差是在所難免的,當然,浮點型別的數也存在誤差,當 遇到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的比較如下圖所示;