浮点文字默认为 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 文字混合将导致在没有硬件支持双精度的平台上性能不佳。