Точность не работает или сбой devcpp в длинных двойных - PullRequest
0 голосов
/ 05 ноября 2011

Я использовал это:

  long double f =79228162514264337593543950336.0;//maximum ; 2 ^ 96 because f is 12 bytes
  cout.precision(30);
  cout<<f;

Но некоторые цифры оказываются неверными.почему?

Ответы [ 2 ]

2 голосов
/ 05 ноября 2011

Какой размер long double предоставляет ваша реализация (или, что эквивалентно, какое значение она показывает для LDBL_DIGITS)? Часто это 80-битный тип с ~ 20 значащими (десятичными) цифрами. В частности, обратите внимание, что тип с плавающей запятой будет разделен между мантиссой (значимым) и показателем степени, поэтому, если его общий размер составляет 12 байт, он будет , а не иметь 12-разрядное значение, поэтому не ожидаем увидеть точность 12 байт.

2 голосов
/ 05 ноября 2011

Правильный суффикс для long double литералов: L:

long double f =79228162514264337593543950336.0L;
...