Нижние границы для плавающих точек - PullRequest
2 голосов
/ 11 ноября 2009

Есть ли нижние границы для типов с плавающей точкой в ​​C? Как есть нижние границы для целочисленных типов (int не менее 16 бит)?

Ответы [ 7 ]

3 голосов
/ 11 ноября 2009

Быть строгим и обоснованным:

ИСО / МЭК 9899: TC2: (WG14 / N1124m, 6 мая 2005 г.) :

5.2.4.2.2, Характеристики плавающих типов

3 голосов
/ 11 ноября 2009

Да. float.h содержит константы, такие как:

FLT_EPSILON, DBL_EPSILON, LDBL_EPSILON это ненулевое значение с наименьшей величиной, которое может быть представлено представлениями float, double и long double.

FLT_MAX и FLT_MIN представляют крайние положительные и отрицательные числа, которые могут быть представлены для float. Аналогичные DBL_ и LDBL_ доступны.

FLT_DIG, DBL_DIG, LDBL_DIG определяется как число с точностью до десятичного знака.

Вы запрашиваете либо значение xxx_MIN, либо значение xxx_EPSILON.

В связи с этим возникает вопрос, в котором я разместил некоторый код, который отображает внутреннюю часть 64-битного числа с плавающей точкой IEEE-754.

2 голосов
/ 11 ноября 2009

float.h содержит много макросов, описывающих различные свойства плавающих типов (включая FLT_MIN и DBL_MIN).

Описание требований пределов в float.h приведено в стандарте (C90 или C99 - 5.2.4.2.2 «Характеристики плавающих типов»).

В частности, согласно стандарту любая реализация должна поддерживать нижнюю границу не менее 1E-37 для float или double. Но реализация может сделать лучше, чем это (и указать, что она делает в FLT_MIN и DBL_MIN).

См. Этот вопрос для получения информации о том, где можно получить копию документов по стандартам, если она вам нужна:

1 голос
/ 11 ноября 2009

В этом черновом стандарте C99 (PDF) указаны минимальные значения точности типов с плавающей запятой в разделе 5.2.4.2.2.

(найдено через Википедию на C99 .)

1 голос
/ 11 ноября 2009

Может быть, это поможет: ссылка на float.h (это C ++, я не уверен, применимо ли это и к простому C)

0 голосов
/ 11 ноября 2009

Выдержки из стандартного проекта (n1401.pdf)

                                      Annex F
                                    (normative)
                       IEC 60559 floating-point arithmetic
    F.1 Introduction
1   ... An implementation that defines _ _STDC_IEC_559_ _ shall conform to
    the specifications in this annex. ...

    F.2 Types
1   The C floating types match the IEC 60559 formats as follows:
    -- The float type matches the IEC 60559 single format.
    -- The double type matches the IEC 60559 double format.
    -- The long double type matches an IEC 60559 extended format ...

В Википедии есть статья о МЭК 559 (или, скорее, IEEE 754-1985) , которая может вас заинтересовать.

0 голосов
/ 11 ноября 2009

Полезная ссылка здесь: Что должен знать каждый учёный об арифметике с плавающей точкой .

Природа числа с плавающей запятой & mdash; его размер, точность, пределы & ndash; действительно определяется аппаратными средствами, а не языком программирования. Число с плавающей запятой одинарной точности на x86 такое же, как в C, C #, Java и любом другом практическом языке программирования. (Исключение составляют эзотерические языки программирования, которые реализуют нечетную ширину числа с плавающей запятой в программном обеспечении.)

...