Точность не работает или сбой devcpp в длинном двойном
Я использовал это:
long double f =79228162514264337593543950336.0;//maximum ; 2 ^ 96 because f is 12 bytes
cout.precision(30);
cout<<f;
Но некоторые цифры оказываются неверными. Зачем?
2 ответа
Решение
Какой размер long double обеспечивает ваша реализация (или, что эквивалентно, какое значение она показывает для LDBL_DIGITS)? Часто это 80-битный тип с ~20 значащими (десятичными) цифрами. В частности, обратите внимание, что тип с плавающей запятой будет разделен между мантиссой (значимыми) и показателем степени, поэтому, если его общий размер составляет 12 байт, он не будет иметь 12-разрядного значения, поэтому вы не можете ожидать, что увидите 12 байт. ценность точности.
Правильный суффикс для long double
литералы L
:
long double f =79228162514264337593543950336.0L;