【发布时间】:2014-12-12 16:42:03
【问题描述】:
我刚刚在我正在使用的 C 程序中遇到了我不理解的行为。
我猜这是由于浮动数字,可能是 int 到 float 演员,但我仍然希望有人向我解释这是正常行为,以及为什么。
这是我的 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-"行不同。
感谢您的帮助。
【问题讨论】:
-
您没有在输出中显示第 3 行。
-
我没有发现任何问题。 FLT_MIN 是大于零的最小可表示浮点数。另见stackoverflow.com/questions/2528039/…
-
尝试用
%e代替%f打印FLT_MIN。 -
@OldProgrammer 我的错。这是«为什么没有出现“3-”行»。谢谢。
-
FLT_MIN不是零 - 它是可以用float表示的大于零的最小数字。由于四舍五入,它打印为0.000000。
标签: c int comparison