gpt4 book ai didi

C - 整数 0 与 float 0.000000 的比较

转载 作者:行者123 更新时间:2023-12-02 06:00:25 27 4
gpt4 key购买 nike

我刚刚在我正在使用的 C 程序中遇到了一个我不理解的行为。

我猜这是由于 float ,可能是 intfloat 转换,但我仍然希望有人向我解释这是一种正常行为,以及为什么.

这是我的 C 程序:

#include <stdio.h>
#include <float.h>

int main ()
{
printf("FLT_MIN : %f\n", FLT_MIN);
printf("FLT_MAX : %f\n", FLT_MAX);

float valueFloat = 0.000000;
int valueInt = 0;

if (valueInt < FLT_MIN) {
printf("1- integer %d < FLT_MIN %f\n", valueInt, FLT_MIN);
}
if (valueFloat < FLT_MIN) {
printf("2- float %f < FLT_MIN %f\n", valueFloat, FLT_MIN);
}

if (0 < 0.000000) {
printf("3- 0 < 0.000000\n");
} else if (0 == 0.000000) {
printf("4- 0 == 0.000000\n");
} else {
printf("5- 0 > 0.000000\n");
}

if (valueInt < valueFloat) {
printf("6- %d < %f\n", valueInt, valueFloat);
} else if (valueInt == valueFloat) {
printf("7- %d == %f\n", valueInt, valueFloat);
} else {
printf("8- %d > %f\n", valueInt, valueFloat);
}


return 0;
}

这是我编译和运行它的命令:

gcc float.c -o float ; ./float

这是输出:

FLT_MIN : 0.000000
FLT_MAX : 340282346638528859811704183484516925440.000000
1- integer 0 < FLT_MIN 0.000000
2- float 0.000000 < FLT_MIN 0.000000
4- 0 == 0.000000
7- 0 == 0.000000

我认识的一位 C 开发人员认为 "1-" 行显示在比较中失去精度是正常的。让我们承认这一点。

  • 但是为什么行 "3-" 没有出现,因为它是相同的比较?
  • 为什么会出现 "2-" 行,因为我比较的是相同的数字? (或者至少我希望如此)
  • 为什么会出现 "4-""7-" 行?这似乎与行 "1-" 不同。

感谢您的帮助。

最佳答案

你的困惑可能越界了:

printf("FLT_MIN : %f\n", FLT_MIN);

将其更改为:

printf("FLT_MIN : %g\n", FLT_MIN);

你会看到,FLT_MIN 实际上不是零,而是比零大一点点。

关于C - 整数 0 与 float 0.000000 的比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27448152/

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