2016-06-09 2 views
1

у меня есть что-то вродеC++ точности в двойных

double d1=4.0; 
double d2=8.0; 

Я пытаюсь напечатать сумму этих двойных значений с помощью cout. Возможно ли печатать сумму с точной точностью без установки точности?

Если значения

double d1=4.23; 
double d2=4.0; 

Сумма должна печатать 8.23 без каких-либо дополнительных нулей.

+0

Это должно помочь: http://stackoverflow.com/questions/554063/how-do-i-print-a-double-value-with-full-precision-using-cout – nephtes

+0

@nephtes OP сказал _ без установки precesion_ –

+0

Так много вопросов в последнее время о желании получить точные результаты с неточными представлениями. – Hurkyl

ответ

2

Собственные значения с плавающей точкой не работают таким образом.

Как только вы установите double:

double d1=4.23; 

Тогда фактическое значение d получает значение составляет, примерно, +4,2300000000000004263256

Это происходит сразу же. Не проходите мимо. Не собирайте 200 долларов. Слишком поздно, даже до того, как вы вычислите сумму, потому что 4.23 не является представимым числом в представлении с плавающей запятой базы 2.

Единственный способ добиться точной нецелочисленной математики - использовать библиотеку, специально предназначенную для этой цели, такую ​​как GMPmpq_t рациональных чисел.

+0

@FirstStep - спасибо за указание моей опечатки; Я на самом деле провел быстрый тест, вместо того, чтобы вычислять это сам, и все пальцы все пальцы ... Но основной момент все еще верен. –

Смежные вопросы