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