什么是“大多数C系统提供逻辑上无限的浮点值?”

问题描述 投票:2回答:1

最初,我将变量x和y声明为int类型。然后`

#include<stdio.h>   

     int main(){
        int x, y = 0 ;
        x = 1 / y;
        printf("%d", x);

        return 0;    
    }

`程序崩溃(出于明显的原因)。现在,我将变量x和y声明为double类型。

#include<stdio.h>   

 int main(){
    double x, y = 0 ;
    x = 1 / y;
    printf("%d", x);

    return 0;    
}

但是输出:0。(为什么?)然后我在printf中将%d更改为%f。

#include<stdio.h>   

 int main(){
    double x, y = 0 ;
    x = 1 / y;
    printf("%f", x);

    return 0;    
}

输出:1.#INF00我不明白这里发生了什么。请向我解释以上情况。谢谢

c precision divide-by-zero format-specifiers
1个回答
1
投票

您可能会接触到的大多数系统都使用IEEE 754表示浮点数。该表示形式具有存储值+ infinity和-infinity的方法。

严格来说,除以0等于undefined behavior,使用IEEE 754的实现扩展了该语言,使其可以用于浮点类型。在这种情况下,除以0可以认为是无穷大,因此您的实现允许它,而1.#INF00是MSVC打印无穷大值的方式。

此外,如在第二个示例中使用%d打印double一样,使用错误的格式说明符进行打印也是未定义的行为。格式说明符必须与传入的数据类型匹配。

© www.soinside.com 2019 - 2024. All rights reserved.