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 ?
  • Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.
    atman.pl!news.supermedia.pl!news.nask.pl!news.nask.org.pl!news.internetia.pl!no
    t-for-mail
    From: Michoo <m...@v...pl>
    Newsgroups: pl.comp.programming
    Subject: Re: Błędny epsilon - this is not a bug, this is ?
    Date: Tue, 06 Nov 2012 11:50:50 +0100
    Organization: Netia S.A.
    Lines: 55
    Message-ID: <k7aqdb$2if$1@mx1.internetia.pl>
    References: <50924bb1$0$1308$65785112@news.neostrada.pl>
    <k72sqt$gq$1@news.dialog.net.pl>
    <509505f2$0$1317$65785112@news.neostrada.pl>
    <k734vm$43g$1@news.dialog.net.pl>
    <509533d1$0$26687$65785112@news.neostrada.pl>
    <k797v2$t98$1@news.dialog.net.pl>
    <509848c6$0$1208$65785112@news.neostrada.pl>
    <k79hhh$26k$1@news.dialog.net.pl> <k7am9f$n0p$1@zeus.man.szczecin.pl>
    NNTP-Posting-Host: 83.238.197.12
    Mime-Version: 1.0
    Content-Type: text/plain; charset=ISO-8859-2; format=flowed
    Content-Transfer-Encoding: 8bit
    X-Trace: mx1.internetia.pl 1352199403 2639 83.238.197.12 (6 Nov 2012 10:56:43 GMT)
    X-Complaints-To: a...@i...pl
    NNTP-Posting-Date: Tue, 6 Nov 2012 10:56:43 +0000 (UTC)
    In-Reply-To: <k7am9f$n0p$1@zeus.man.szczecin.pl>
    X-Tech-Contact: u...@i...pl
    User-Agent: Mozilla/5.0 (X11; Linux i686 on x86_64; rv:10.0.6esrpre) Gecko/20120817
    Icedove/10.0.6
    X-Server-Info: http://www.internetia.pl/
    Xref: news-archive.icm.edu.pl pl.comp.programming:200523
    [ ukryj nagłówki ]

    On 06.11.2012 10:46, slawek wrote:
    > Użytkownik "Tomasz Sowa" napisał w wiadomości grup
    > dyskusyjnych:k79hhh$26k$...@n...dialog.net.pl...
    >
    >> No właśnie nie wystarczy, unie zrobiłem specjalnie żeby obliczenie
    >> dodawania zrobić odpowiednio w 32 bitach (float) i 64 bitach (double). W
    >> twoim przypadku obliczenia będą przeprowadzone w 80 bitach lub więcej
    >> (zależnie od opcji kompilacji).
    >
    > Ok, ale podążając za twoim pomysłem należałoby stwierdzić, że
    > jakiekolwiek porównania a > b należy usunąć z programów i zastąpić je
    > porównaniami (int)a > (int)b .
    >


    > Czyli - zamiast problemu "DBL_EPSILON jest podany z 50% błędem"

    NIE jest, nie trolluj. Już ci podawałem fragment standardu, w którym
    wyraźnie stoi, że DBL_EPSILON zawiera dodatnią różnicę między 1.0 a
    następną wartością reprezentowalną w typie double.


    > - mamy
    > problem "arytmetyka liczb double jest źle zaimplementowana".

    Czy ty kiedyś siedziałeś gdzieś w pobliżu numeryki?

    Jeżeli dokładność jest większa to nie jest to problem, chyba, że
    programista naprawdę coś zepsuł. Precyzja w punktach wynosi 100%,
    dlatego używa się ograniczeń worst-case. Nikt myślący nie zrobi w
    typowym przypadku relacji równoważności[*] w oparciu o DBL_EPSILON -
    zawsze to będzie jego wielokrotność.


    P.S.
    Skompiluj, uruchom, zrozum:

    #include <cstdio>
    double foo(double d){
    return d;
    }
    main()
    {
    double d1=1.0;
    double d2=1.5E-16;
    printf("%.18lf %.18lf\n",d1+d2-1.0,foo(d1+d2)-1.0);
    }

    [*] Wynika to z tego, że każda operacja wprowadza przynajmniej błąd z
    przedziału <0,DBL_EPSILON/2>, niektóre tak duży jak np
    sqrt(DBL_EPSILON/2) - np. sqrt ;)

    --
    Pozdrawiam
    Michoo

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: