Точность не работает или сбой 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;
Другие вопросы по тегам