C - 整数0与浮点数0.000000的比较

Thi*_*ult 2 c int comparison

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

我想这是由于浮动数字,也许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;
}
Run Code Online (Sandbox Code Playgroud)

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

gcc float.c -o float ; ./float
Run Code Online (Sandbox Code Playgroud)

这是输出:

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
Run Code Online (Sandbox Code Playgroud)

我知道AC开发人员认为线路"1-"显示在比较中会失去精度.我们承认这一点.

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

谢谢你的帮助.

Kai*_*zke 6

你的困惑可能超出了界限:

printf("FLT_MIN : %f\n", FLT_MIN);
Run Code Online (Sandbox Code Playgroud)

将其更改为:

printf("FLT_MIN : %g\n", FLT_MIN);
Run Code Online (Sandbox Code Playgroud)

你会看到,FLT_MIN实际上不是零,而是一个大于零的(微小的).