c - 为什么在增加 float 值时它会给我 "inf"和相同的值?

标签 c compiler-construction floating-point

我只是在 mac pro 上测试 float in c 的最大表示。 我的程序看起来像这样。 程序有两种方式。 #包括

int main(void) {
    float a;
    a = 0;

    int index = 0;
    while(1) {
            a++;

            a = a +10000000000; // 1, **adding**  **resulting (1)**
            //a = a* 5;            2, **multiplying** **resulting (2)**

            printf("%f, %d\n",a,idex);

    }
}

结果 (1) 它一直增加到某个点,它只显示相同的结果,如下所示 288230376151711744.000000。

结果 (2) 除了inf

,它甚至什么都没显示

谁能解释为什么会发生不同的情况..?

最佳答案

对于非常大的 float 值,两个连续 float 之间的差距大于 20000000000。一旦达到这一点,添加 10000000000 将无法更改该值。

乘法引起的变化与被乘的值成比例,因此数字不断增加直到溢出到无穷大。

关于c - 为什么在增加 float 值时它会给我 "inf"和相同的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23073833/

相关文章:

c - 需要有关简单 C 命令行参数的帮助

java - Java 后端 API

c++ - 为什么 printf() 将 float 提升为 double ?

c - 在 Linux 上用 C 语言读写串口

c - 检查变量是否为某物值的方法

parsing - 基于 LLVM 的编译器的前端

c++ - 如何在C++中读取位数较多的 float ?

c - double 组上的 SIMD?

c - 开始在IAR中写一个stm32l0的bootloader

c++ - 我还应该使用#include guard 和#pragma 一次吗?