минимум удваивает значение в C/C++

Я испытываю затруднения при обертывании моей головы вокруг лямбда-выражений, потому что я работаю в Visual FoxPro, который имеет Макроподстановку и ExecScript {}, и Оцените () функции, которые, кажется, служат почти такой же цели.

? Calculator(10, 23, "a + b")
? Calculator(10, 23, "a - b");

FUNCTION Calculator(a, b, op)
RETURN Evaluate(op)

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

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

78
задан Will 20 July 2009 в 13:23
поделиться

5 ответов

-DBL_MAX в ANSI C , который определен в float.h.

120
ответ дан 24 November 2019 в 10:23
поделиться

Вы ищете актуальную бесконечность или минимальное конечное значение? В первом случае используйте

-numeric_limits<double>::infinity()

, который работает, только если

numeric_limits<double>::has_infinity

В противном случае вы должны использовать

numeric_limits<double>::lowest()

, который был введен в C ++ 11.

Если low () недоступен, вы может вернуться к

-numeric_limits<double>::max()

, который может отличаться от low () в принципе, но обычно не работает на практике.

20
ответ дан 24 November 2019 в 10:23
поделиться
- std::numeric_limits<double>::max()

должен работать нормально

Числовые ограничения

7
ответ дан 24 November 2019 в 10:23
поделиться

Попробуйте следующее:

-1 * numeric_limits<double>::max()

Ссылка: numeric_limits

Этот класс специализирован для каждого из основные типы, с его члены возвращаются или устанавливаются в различные значения, которые определяют свойства этого типа в конкретная платформа, на которой компилируется.

32
ответ дан 24 November 2019 в 10:23
поделиться

Плавающий номера точек (IEEE 754) симметричны, поэтому, если вы можете представить наибольшее значение ( DBL_MAX или numeric_limits :: max () ), просто добавьте знак минус.

А затем отличный способ:

double f;
(*((long long*)&f))= ~(1LL<<52);
70
ответ дан 24 November 2019 в 10:23
поделиться
Другие вопросы по тегам:

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