Re: [c++][decimal] boost.multiprecision не работает
От: VTT http://vtt.to
Дата: 19.10.15 08:28
Оценка: +1
Здравствуйте, anatoly1, Вы писали:

A>Это баг или фича?


Это норма.
0.1 в double на самом деле представлено как 0.10000000000000001.
Переменная b при инициализации получает значение 0.1000000000000000055511151231257827021181583404541015625
А сумма b2 1.000000000000000055511151231257827021181583404541015625
При сравнении (b2==1) b2 не приводится к int, а наоборот.
Если написать (static_cast<int>(b2) == 1), то результат будет true.

Ну или можно сделать так:
  boost_decimal b2(1);
  boost_decimal b3(10);
  auto b4(b2 / b3); // честный 0.1
  ::std::cout << ::std::setprecision(80) << b4 << ::std::endl;
  auto s2(b4+b4+b4+b4+b4+b4+b4+b4+b4+b4);
  ::std::cout << "sum2 " << ::std::setprecision(80) << s2 << ::std::endl;
  assert(s2==1);
Говорить дальше не было нужды. Как и все космонавты, капитан Нортон не испытывал особого доверия к явлениям, внешне слишком заманчивым.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.