C 为什么浮点数不';t溢出到无穷大

C 为什么浮点数不';t溢出到无穷大,c,floating-point,C,Floating Point,假设我们有以下代码: float f = 999999999999*9999999999999999*999999999999; //a large number to make it overflow 因此,根据浮点指向规则,结果应为无穷大,如下所示: 但是我检查了结果的位表示,它不是无穷大,而是其他一些,为什么?在9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999

假设我们有以下代码:

float f = 999999999999*9999999999999999*999999999999; //a large number to make it overflow
因此,根据浮点指向规则,结果应为无穷大,如下所示:


但是我检查了结果的位表示,它不是无穷大,而是其他一些,为什么?

9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
中没有一个值是浮点,所以你没有做浮点运算。事实上,即使没有设置任何额外的警告选项,gcc也会为您的代码提供此警告(clang给出类似的警告):

改为这样做

float f = 999999999999.0f*9999999999999999*999999999999;
printf("%f\n", f);
输出:

inf

将第一个字面值设为浮点数会强制进行浮点运算,因此可以得到所需的无穷大值。

使用浮点值时,始终首选
double
inf