浮點文字預設為 double 型別
將 float
型別的變數初始化為文字值或將它們與文字值進行比較時必須小心,因為像 0.1
這樣的常規浮點文字屬於 double
型別。這可能會導致意外:
#include <stdio.h>
int main() {
float n;
n = 0.1;
if (n > 0.1) printf("Wierd\n");
return 0;
}
// Prints "Wierd" when n is float
在這裡,n
被初始化並四捨五入為單精度,結果為 0.10000000149011612。然後,將 n
轉換回雙精度以與 0.1
literal(等於 0.10000000000000001)進行比較,從而導致不匹配。
除了舍入錯誤之外,將 float
變數與 double
文字混合將導致在沒有硬體支援雙精度的平臺上效能不佳。