浮點文字預設為 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 文字混合將導致在沒有硬體支援雙精度的平臺上效能不佳。