eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingBłędny epsilon - this is not a bug, this is ?Re: Błędny epsilon - this is not a bug, this is ?
  • Data: 2012-11-05 21:35:47
    Temat: Re: Błędny epsilon - this is not a bug, this is ?
    Od: Tomasz Sowa <t...@N...ttmath.org> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    On 2012.11.03 16:10, slawek wrote:

    >> Bo popełniasz błąd który się propaguje w każdej iteracji
    >> algorytmu.
    >
    > Nie ma błędu. Za każdym razem jest na nowo sprawdzanie 1.0+eps > 1.0,
    > tj. pętla while(1.0 + eps > 1.0) {...}

    a no, tak sądziłem, sprawdź poniższy program

    #include <iostream>
    #include <stdint.h>
    #include <iomanip>

    template<typename float_t, typename int_t>
    float_t machine_eps()
    {
    union
    {
    float_t f;
    int_t i;
    } one, one_plus, little, last_little;

    one.f = 1.0;
    little.f = 1.0;
    last_little.f = little.f;

    while(true)
    {
    one_plus.f = one.f;
    one_plus.f += little.f;

    if( one.i != one_plus.i )
    {
    last_little.f = little.f;
    little.f /= 2.0;
    }
    else
    {
    return last_little.f;
    }
    }
    }

    int main()
    {
    std::cout << "machine epsilon:\n";
    std::cout << "float: " << std::setprecision(18)
    << machine_eps<float, uint32_t>() << std::endl;
    std::cout << "double: " << std::setprecision(18)
    << machine_eps<double, uint64_t>() << std::endl;
    }

    /home/tomek/roboczy/test$ g++ -o test test.cpp && ./test
    machine epsilon:
    float: 1.1920928955078125e-07
    double: 2.22044604925031308e-16

    ale to oczywiście tylko aproksymacja

    --
    Tomek
    http://www.ttmath.org

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: