я узнал из wikipedia, что двойное число имеет не более 15-17 значащих десятичных цифр15-17 Значительное десятичное значение для двоичного кода64?
Однако для простой программы C++ ниже
double x = std::pow(10,-16);
std::cout<<"x="<<std::setprecision(100000)<<x<<std::endl;
(Чтобы проверить это, используйте this online shell), я получаю
x=9.999999999999999790977867240346035618411149408467364363417573258630000054836273193359375e-17
, который имеет 88 значащих десятичных цифр, которые, по-видимому, противоречит вышеупомянутой претензии из Wiki. Может ли кто-нибудь уточнить, я должен что-то неправильно понять? Благодарю.
Большая часть этих цифр * не * значительна; большинство из них не помогают отличить это значение от следующего наибольшего или минимально возможного значения «double». –
@ Давид: Я проголосовал за повторное открытие (не понимая, что у меня есть решающий голос из-за моего золотого значка ...); Я считаю, что это не [стандарт «почему FP ломается?» - вопрос типа] (http://stackoverflow.com/questions/588004/is-floating-point-math-broken); он задает вопрос о явном несоответствии между стандартными утверждениями о точности и поведением 'setprecision'. –
@OliverCharlesworth Я считаю, что это тот же старый вопрос, который, как всегда, о представимости –