为什么浮点数不会溢出到无穷大

时间:2020-07-02 11:58:16

标签: c floating-point

假设我们有以下代码:

float f = 999999999999*9999999999999999*999999999999; //a large number to make it overflow

因此,根据浮点规则,结果应为无穷大,如下所示: enter image description here

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

1 个答案:

答案 0 :(得分:9)

999999999999*9999999999999999*999999999999中的值都不是浮点数,因此您不需要进行浮点数运算。实际上,即使没有设置任何其他警告选项,gcc也会为您的代码提供此警告(clang也提供类似的警告):

warning: integer overflow in expression of type 'long int' results in '4467987020393345025' [-Woverflow]

改为执行此操作

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

输出:

inf

为第一个文字加上浮点数会强制执行浮点运算,因此您可以获得所需的无限值。