C++ Boost cpp_dec_float_100 выдает разные ответы

cpp_dec_float_100 x = 0.00000000000001;  
cpp_dec_float_100 z = 0.00000000000008;  
cpp_dec_float_100 y = 0.1;  
cout << setprecision(100) << x +z + y; 
 
//0.100000000000090005551115123125676439960068731336843652116562475296035472638322971761226654052734375
cpp_dec_float_100 x = (cpp_dec_float_100)"0.00000000000001"; 
cpp_dec_float_100 z = (cpp_dec_float_100)"0.00000000000008"; 
cpp_dec_float_100 y = (cpp_dec_float_100)"0.1"; 
cout << setprecision(100) << x +z + y;

//0.10000000000009

Почему первый вариант записи кода дает неверный ответ?


Ответы (1 шт):

Автор решения: Stop-TussiN

Потому что в первом варианте записи значения переменных заданы с помощью стандартных экспоненциальных форматов, которые могут привести к неточностям в результатах. Во втором варианте кода значения заданы с помощью специального формата типа cpp_dec_float_100, который предоставляет более точные результаты.

→ Ссылка