Выход std::numeric_limits<double>::epsilon()
вместо этого. std::numeric_limits
объявляется в стандартном заголовке <limits>
.
Более обычный метод, если вы действительно должны вычислить его (а не доверяя стандартную библиотеку, чтобы обеспечить правильное значение) является
double epsilon = 1.0;
while ((1.0 + 0.5 * epsilon) != 1.0)
epsilon *= 0.5;
или сделать расчет.
Обратите внимание, что (хотя не показано, как вы это сделали) это может быть на самом деле ваш long double
расчет, что является неправильным, так как буквальные значения с плавающей точкой (например 1.0
) по умолчанию, чтобы быть типа double
, не long double
- которые могли бы предположим, что ошибка заключается в вашем расчете результата long double
, а не double
. Если вы хотите, чтобы результат был типа long double
, было бы желательно указать все эти литеральные значения (1.0
, 0.5
), суффикс L
, заставить их быть типа long double
.
Также не забудьте использовать соответствующее форматирование при потоковой передаче результирующего значения до std::cout
, чтобы гарантировать, что выход также имеет точность/точность, в которой вы нуждаетесь. Настройки по умолчанию (то, что вы получаете, если не контролируете форматирование) могут отличаться.