gpt4 book ai didi

C 中 float 和 double 的比较

转载 作者:行者123 更新时间:2023-12-02 13:48:39 25 4
gpt4 key购买 nike

我编写了以下代码来比较 C 中的浮点变量和 double 变量。

int main()
{
float f = 1.1;
double d = 1.1;

if(f==d)
printf("EQUAL");

if(f < d)
printf("LESS");

if(f > d)
printf("GREATER");

return 0;
}

我正在使用在线C编译器here编译我的代码。

我知道对于循环小数永远不会打印 EQUAL。然而,我期望打印的内容是 LESS,因为 double 应该具有更高的精度,因此应该比 float 更接近实际值 1.1。据我所知,在C中,当你比较float和double时,float的尾数被零扩展为double,并且零扩展值应该总是更小。

相反,在所有情况下都会打印 GREATER。我在这里遗漏了什么吗?

最佳答案

最接近 1.1 的 float 的精确值为 1.10000002384185791015625。二进制等效值为 1.00011001100110011001101

最接近 1.1 的 double 值的精确值为 1.100000000000000088817841970012523233890533447265625。二进制等效值为 1.0001100110011001100110011001100110011001100110011010。

将两个二进制数相邻排列:

1.00011001100110011001101
1.0001100110011001100110011001100110011001100110011010

舍入为浮点型的前几个截断位是 11001100,大于一半,因此转换为浮点型时会向上舍入,使其最低有效位为 11001101。该舍入导致最显着的差异是浮点型中的 1在 double 中为 0 的位位置。 float 大于 double,无论扩展为 double 的 float 中较低有效位的值为零,但 double 中的较低有效位的值不为零。

关于C 中 float 和 double 的比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59115928/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com