判斷兩個( float )變數是否相等以及和 0 值比較方法
阿新 • • 發佈:2019-01-22
float 型: 佔 4 位元組,7 位有效數字
double 型:佔 8 位元組,15~16 位有效數字
浮點數的表示是不精確的,float 和 double 都不能保證可以把所有實數都準確的儲存在計算機中。測試例子如下:
- #include <stdio.h>
- int main(int argc, char *argv[])
- {
- float f = 99.9f;
- printf("f = %f\n", f);
- return 0;
- }
執行結果如下:
由於浮點數的表示是不精確的,所以不能直接比較兩個數是否完全相等 。一般都是在允許的某個範圍內認為某個個浮點數相等,如有兩個浮點數a、b,允許的誤差範圍為 1e-6,則 abs(a-b) <= 1e-6,即可認為 a 和 b 相等。
- #include <stdio.h>
- #include <stdlib.h> //abs()
- int main(int argc, char *argv[])
- {
- float a = 10.55f;
- float b = 10.55f;
- if( abs(a-b) <= 1e-6 ){
- printf("a 等於 b\n");
-
}else
- printf("a 不等於 b\n");
- }
- return 0;
- }
還有一種方法就是擴大再取整,比如 a=5.23、b=5.23,直接比較 a==b 有可能為 false,但是 a 和 b 都擴大一百倍,然後強制轉換為 int 型別,再用 == 比較就可以了。
- #include <stdio.h>
- int main(int argc, char *argv[])
- {
- float a = 5.23;
- float b = 5.23;
-
if( (int)(a*100) == (int)(b*100) ){
- printf("a 等於 b\n");
- }else{
- printf("a 不等於 b\n");
- }
- return 0;
- }
float 型變數和“零值”比較的方法:
- #include <stdio.h>
- int main(int argc, char *argv[])
- {
- float x = 0.000f;
- constfloat EPSINON = 0.000001;
- if (( x >= -EPSINON ) && ( x <= EPSINON ))
- {
- printf("x 是零\n");
- }
- return 0;
- }
浮點型變數並不精確,其中 EPSINON 是允許的誤差(即精度),所以儘量不要將 float 變數用 “==” 或 “!=” 與數字比較,應該設法轉化成 “>=” 或 “<=” 形式。