Моделирование бесконечности для наибольшего двойного значения - программирование
Подтвердить что ты не робот

Моделирование бесконечности для наибольшего двойного значения

Вопрос о моделировании бесконечности в С++ для типа данных double. Мне нужно это в файле заголовка, поэтому мы не можем использовать такие функции, как numeric_limits.

Есть ли определенная константа, которая представляет наибольшее значение?

4b9b3361

Ответ 1

числа с плавающей запятой (например, удвоения) могут фактически содержать положительную и отрицательную бесконечность. Постоянный INFINITY должен находиться в заголовке math.h.

Прошел стандартный дайвинг и нашел текст:

4 Макрос INFINITY расширяется до постоянного выражения типа float представляя положительную или неподписанную бесконечность, если таковая имеется; еще положительная константа типа float, которая переполняется во время перевода.

В разделе 7.12 Mathematics <math.h>


Тогда, конечно, у вас есть вспомогательная функция isinf для проверки бесконечности (которая также находится в math.h).

7.12.3.3 Макрос isinf

int isinf (real-floating x);

Описание: макрос isinf определяет, является ли значение его аргумента бесконечным (положительное или отрицательный). Во-первых, аргумент представлен в более широком формате его семантический тип преобразуется в его семантический тип. затем определение основано на типе аргумента.

Возвращает: Макрос isinf возвращает ненулевое значение тогда и только тогда, когда его аргумент имеет бесконечное значение.

Ответ 2

numeric_limits функции - все constexpr, поэтому они отлично работают, как константы времени компиляции (при условии, что вы используете текущую версию С++). Поэтому std::numeric_limits<double>::infinity() должен работать в любом контексте.

Даже если вы используете более старую версию, это все равно будет работать везде, где вам не требуется постоянная времени компиляции. Из вашего вопроса неясно, действительно ли вам требуется постоянная времени компиляции или нет; просто быть в заголовке необязательно требуется.

Если вы используете более старую версию и вам действительно нужна постоянная времени компиляции, макрос INFINITY в cmath должен работать на вас. Это фактически значение float для бесконечности, но оно может быть преобразовано в double.

Ответ 3

Не знаете, почему вы не можете использовать std:: numeric_limits в файле заголовка. Но это также перенесено из ANSI C:

#include <cfloat>

DBL_MAX

Ответ 6

Из Wikipedia:

0x 7ff0 0000 0000 0000   = Infinity
0x fff0 0000 0000 0000   = −Infinity

Ответ 7

DBL_MAX можно использовать. Это можно найти в файле float.h следующим образом

    #define DBL_MAX         1.7976931348623158e+308 /* max value */

Ответ 8

Не работает ли это?

const double infinity =  1.0/0.0;

Ответ 9

#include <cmath>
...
double d = INFINITY;

Вы можете найти INFINITY, определенный в <cmath> (math.h):

Постоянное выражение типа float, представляющее положительную или неподписанную бесконечность, если доступно; else - положительная константа типа float, которая переполняется во время перевода.