Здравствуйте, Zhendos, Вы писали:
Z>Здравствуйте, Kazmerchuk Pavel, Вы писали:
KP>>KP>>{
KP>> double a = 0.014390783999999978;
KP>> double b = 0.052996730719235739;
KP>> double c = a - b; //-0.038605946719235763
KP>> assert((b+c) == a); //b+c = 0.014390783999999976
KP>>}
KP>>
Z>можно вычислить ошибку (смотри D. E. Knuth, TAOCP, Vol 2, 4.2.2, Theorem B.):
Z>Z>#include <cassert>
Z>double sum(double u, double v, double& t) {
Z> double s = u + v;
Z> double up = s - v;
Z> double vpp = s - up;
Z> up -= u;
Z> vpp -= v;
Z> t = -(up + vpp);
Z> return s;
Z>}
Z>int main()
Z>{
Z> double a = 0.014390783999999978;
Z> double b = 0.052996730719235739;
Z> double err;
Z> const auto c = sum(a, -b, err);
Z> assert((b+c) + err == a); //b+c = 0.014390783999999976
Z>}
Z>
Спасибо! То что нужно!