c - стандартная - maxfloat
Почему FLT_MIN равна нулю? (2)
Формат «% f» печатает 6 знаков после запятой в фиксированном формате. Поскольку FLT_MIN намного меньше, он выглядит как нуль в фиксированной точке. Если вы используете формат «% e» или «% g», вы получите лучший отформатированный ответ. Аналогично FLT_MAX.
#include <float.h>
#include <stdio.h>
int main(void)
{
printf("MIN = %f, MAX = %f\n", FLT_MIN, FLT_MAX);
printf("MIN = %e, MAX = %e\n", FLT_MIN, FLT_MAX);
return(0);
}
MIN = 0.000000, MAX = 340282346638528859811704183484516925440.000000
MIN = 1.175494e-38, MAX = 3.402823e+38
limits.h
указывает пределы для математических типов без плавающей запятой, например INT_MIN
и INT_MAX
. Эти значения являются наиболее отрицательными и наиболее положительными значениями, которые вы можете представить с помощью int.
В float.h
есть определения для FLT_MIN
и FLT_MAX
. Если вы выполните следующее:
NSLog(@"%f %f", FLT_MIN, FLT_MAX);
Вы получаете следующий результат:
FLT_MIN = 0.000000, FLT_MAX = 340282346638528859811704183484516925440.000000
FLT_MAX
равно действительно большому числу, как и следовало ожидать, но почему FLT_MIN
равен нулю вместо действительно большого отрицательного числа?
На самом деле это не нуль, но может выглядеть нулевым, если вы проверите его с помощью printf
или NSLog
, используя %f
.
Согласно float.h
(по крайней мере, в Mac OS X 10.6.2), FLT_MIN
описывается как:
/* Minimum normalized positive floating-point number, b**(emin - 1). */
Обратите внимание на положительное в этом предложении: FLT_MIN
ссылается на минимальное (нормализованное) число, большее нуля . (Есть намного меньшие ненормированные числа).
Если вы хотите минимальное число с плавающей запятой (включая отрицательные числа), используйте -FLT_MAX
.