Все объекты в C++ имеют тип. Тип d_max
- double
. Тип d_max + 1.1
по-прежнему двойной. Если значение d_max
является максимальным значением для double
, то d_max + 1.1
не является представимым, и будет использоваться самое близкое представляемое значение, которое равно d_max
(однако, если вы добавляете значительно большее значение, самое близкое представляемое значение считается положительной бесконечностью). Таким образом, ваш std::max
вызов эквивалентен:
std::max(d_max, d_max)
Чтобы продемонстрировать:
double d_max = std::numeric_limits<double>::max();
bool b = (d_max == (d_max + 1.1));
std::cout << std::boolalpha << b << std::endl;
Это дает true
как выход.
В ответ на ваш комментарий, я предполагаю, что вы делаете что-то вроде этого:
double d_max = std::numeric_limits<double>::max();
long double ld = d_max + 1;
std::cout << (d_max == ld) << std::endl;
И странно вы обнаружите, что, по-видимому d_max
и ld
равны. Зачем? Ну d_max
- double
. Когда вы делаете d_max + 1
, результатом операции является также double
- значение d_max + 1
не может быть представлено в double
, хотя, как описано выше, так что выбрано самое близкое представляемое значение (d_max
). Затем это значение присваивается ld
.
Обратите внимание, что это вряд ли можно устранить, просто убедившись, что оператор приводит к long double
(возможно, с d_max + 1.0L
). При таких огромных количествах (около 10^308
с представлением IEEE 754) добавление 1 не приведет вас к следующему представляемому значению в long double
. С моей реализации, я должен добавить 10 (который 1 следуют 289 нулями) фактически приводит к изменению значения:
double d_max = std::numeric_limits<double>::max();
long double ld = d_max + 1E289L;
std::cout << (d_max == ld) << std::endl;
Кроме того, нет никакой гарантии, что long double
имеет большую точность, чем double
. Единственная гарантия заключается в том, что она не имеет меньше точность.
Непонятно, что вы ожидаете отсюда. Если 'd_max' является максимальным значением для' double', вы не получите ничего выше. –
Максимум ... <вставить цитату Inigo Montoya здесь> –
Невозможно сравнить наивысшее значение двойного с другим значением без типа? – bottus