Почему FLT_MIN равен нулю?

limits.h указывает пределы для типов нематематических операций с плавающей точкой, например. INT_MIN и INT_MAX. Эти значения являются самыми отрицательными и большинство положительных значений, что можно представить использование интервала.

В 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 равняться нулю вместо действительно большого отрицательного числа?

27
задан mskfisher 14 May 2012 в 20:27
поделиться

2 ответа

На самом деле это не ноль, но может выглядеть как ноль, если вы проверите его с помощью 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 .

55
ответ дан 28 November 2019 в 04:37
поделиться

Формат "% 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
12
ответ дан 28 November 2019 в 04:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: