







Intervalna algebra omogućava da kontrolišemo, kako grešku odsecanja ili zaokrugljivanja ili računa (što je isto), tako i ukupnu grešku, koja uključuje i grešku merenja i grešku metode. Vrednost izraza izračunatog u intervalnoj algebri je interval kome garantovano pripada tačna vrednost izraza. Jedna od intervalnih biblioteka za C++ uključena je u boost. Evo primera njene primene na računanje sinusa pomoću tejlorovog razvoja.
Code:
#include <boost/numeric/interval.hpp>
using namespace boost;
using namespace numeric;
using namespace interval_lib;
typedef interval<double> real;
real sin(double arg) {
real x(arg);
const real pi2(6.283185307179586, 6.2831853071795867);
int factor = 1;
if (x == 0) {
return real(0);
}
if (x < 0) {
factor = -1;
x = -x;
}
real q = x / pi2;
q -= floor(q.upper());
if (q.upper() > 0.5) {
factor = -factor;
q -= 0.5;
}
if (q.upper() > 0.25) {
q = -q + 0.5;
}
x = q*pi2;
real x2 = -x*x;
real s(0);
real f = x;
int n = 1;
real approximation(qMin(0.0, x.lower()), qMax(0.0, x.upper()));
while (true) {
s += f;
n += 2;
f *= x2;
f /= n*(n-1);
real newApproximation = s + f;
newApproximation = real(qMin(newApproximation.lower(), s.lower()), qMax(newApproximation.upper(), s.upper()));
newApproximation = real(qMax(newApproximation.lower(), approximation.lower()), qMin(newApproximation.upper(), approximation.upper()));
if (newApproximation.lower() == approximation.lower() && newApproximation.upper() == approximation.upper()) {
break;
}
approximation = newApproximation;
}
if (factor == -1) {
return -approximation;
}
return approximation;
}
#include <boost/numeric/interval.hpp>
using namespace boost;
using namespace numeric;
using namespace interval_lib;
typedef interval<double> real;
real sin(double arg) {
real x(arg);
const real pi2(6.283185307179586, 6.2831853071795867);
int factor = 1;
if (x == 0) {
return real(0);
}
if (x < 0) {
factor = -1;
x = -x;
}
real q = x / pi2;
q -= floor(q.upper());
if (q.upper() > 0.5) {
factor = -factor;
q -= 0.5;
}
if (q.upper() > 0.25) {
q = -q + 0.5;
}
x = q*pi2;
real x2 = -x*x;
real s(0);
real f = x;
int n = 1;
real approximation(qMin(0.0, x.lower()), qMax(0.0, x.upper()));
while (true) {
s += f;
n += 2;
f *= x2;
f /= n*(n-1);
real newApproximation = s + f;
newApproximation = real(qMin(newApproximation.lower(), s.lower()), qMax(newApproximation.upper(), s.upper()));
newApproximation = real(qMax(newApproximation.lower(), approximation.lower()), qMin(newApproximation.upper(), approximation.upper()));
if (newApproximation.lower() == approximation.lower() && newApproximation.upper() == approximation.upper()) {
break;
}
approximation = newApproximation;
}
if (factor == -1) {
return -approximation;
}
return approximation;
}
Dakle, za svako













Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.