[ Nedeljko @ 14.09.2010. 11:44 ] @
Svakoj realnoj funkciji realne promenljive možemo pridružiti jednu intervalnu funkciju koja intervalima pridružuje intervale tako da važi: ako je interval podskup domena funkcije i za svako važi . Naravno, uvek se može staviti da je , ali od toga nema nikakve koristi. Cilj je da dobijeni interval bude po mogućstrvu što uži.

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;
}


Dakle, za svako neka je interval kome pripadaju sve moguće vrednosti oblika za . Jasno je da za to koristimo intervalnu algebru. Mada se greška metode (ostatak) smanjuje sa povećavanjem greška računa će biti sve veća i veća, pa će interval da se proširuje posle nekog . Uz oznaku , tačna vrednost sinusa će svakako pripadati svakom od intervala , jer pripada svakom od intervala i niz intervala će biti neopadajući, ali će posle nekog vremena biti konstantan. Stoga izračunavanje treba prekinuti u trenutku kada bude jednako sa .