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