eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingBłędny epsilon - this is not a bug, this is ?
Ilość wypowiedzi w tym wątku: 181

  • 61. Data: 2012-11-06 10:46:22
    Temat: Re: Błędny epsilon - this is not a bug, this is ?
    Od: "slawek" <h...@s...pl>

    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" - mamy
    problem "arytmetyka liczb double jest źle zaimplementowana". Miałem napisać
    "ROTFL", ale jak się głębiej zastanowić - nie ma się z czego śmiać.


  • 62. Data: 2012-11-06 11:31:24
    Temat: Re: Bdny epsilon - this is not a bug, this is ?
    Od: "AK" <n...@n...com>

    Użytkownik "bartekltg" <b...@g...com> napisał:

    > Obcinanie pośrednich wyników do double (przy wejściu/wyjśćiu funkcji)
    > kontra liczenie wszystkiego w rejestrach koprocesora, czy coś głębszego?

    Napewno to + mozliwa w tym przypadku (czyli funkcji inline) optymalizacja calosciowa
    wyrazenia (parse-tree, semikodu - i kodu wynikowego/maszynowego).

    Poniewaz inline to tylko sugestia a nie oblig, wiec w praktyce moga (i dzieja sie)
    "cuda" np. w debug sa inne wyniki fp niz w release, niektore funkcje po dodaniu
    niewinnej linijki daja daja nieco inne wyniki itp itd.
    W tym kontekscie "problem" buraka hrabiego (jak i on sam) z DBL_EPSILON jest
    po prostu smieszny.

    AK


  • 63. Data: 2012-11-06 11:43:48
    Temat: Re: Błędny epsilon - this is not a bug, this is ?
    Od: g...@s...invalid (Adam Wysocki)

    slawek <s...@h...pl> wrote:

    > Panie Adamie, zadam takie osobiste pytanie:

    Nie do Ciebie piszę. Ty już pokazałeś w tym temacie swój poziom.

    --
    Gof
    http://www.chmurka.net/


  • 64. Data: 2012-11-06 11:48:04
    Temat: Re: Błędny epsilon - this is not a bug, this is ?
    Od: "AK" <n...@n...com>

    Użytkownik "slawek" <h...@s...pl> napisał w:

    >>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 .

    Nie buraku i (jak widac) niedouku.
    Takie porownania _zawsze_ robi sie np. w ten sposob.

    int fp
    a > b (a - b) > EPS
    a < b (a - b) > -EPS
    a >= b (a - b) >= -EPS
    a <= b (a - b) <= EPS
    a == b fabs(a - b) <= EPS
    a != b fabs(a - b) > EPS

    Wszedzie. W numeryce, nawet w bankowosci (nie wszedzie jest/byl decimal)
    slowem wszedzie gdzie wystepuja dzialania na fp

    W dodatku to EPS winno byc o wiele wieksze od DBL_EPSILON
    i innych maszynowych bebechow (czesto jest to zreszta EPS wzgledne).
    Owszem, masochistow sie nie uleczy wiec mozna im zezwolic
    na uzycie DBL_EPSILON jako EPS, tyle te to podwojone (2.22..) z
    naglowkow C z Pythona i Matlaba. Sam sobie odpowiedz dlaczego.
    Przy pojedynczym pojawiaja sie "male klopoty".

    AK


  • 65. Data: 2012-11-06 11:50:50
    Temat: Re: Błędny epsilon - this is not a bug, this is ?
    Od: Michoo <m...@v...pl>

    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


  • 66. Data: 2012-11-06 12:02:50
    Temat: Re: Bdny epsilon - this is not a bug, this is ?
    Od: Michoo <m...@v...pl>

    On 06.11.2012 11:31, AK wrote:
    > Poniewaz inline to tylko sugestia a nie oblig, wiec w praktyce moga (i
    > dzieja sie)
    > "cuda" np. w debug sa inne wyniki fp niz w release, niektore funkcje po
    > dodaniu
    > niewinnej linijki daja daja nieco inne wyniki itp itd.

    boost::Interval Arithmetic Library - wychodzi ~2x wolniej, ale pozwala
    całkiem nieźle oszacować, czy uzyskany wynik jest czymś więcej niż
    nagromadzeniem błędów obliczeniowych.

    --
    Pozdrawiam
    Michoo


  • 67. Data: 2012-11-06 12:05:08
    Temat: Re: Błędny epsilon - this is not a bug, this is ?
    Od: "AK" <n...@n...com>

    Autokorekta typo:

    > a < b (a - b) > -EPS

    winno byc:
    a < b (a - b) < -EPS

    AK



  • 68. Data: 2012-11-06 13:31:20
    Temat: Re: Błędny epsilon - this is not a bug, this is ?
    Od: Roman W <r...@g...com>

    W dniu wtorek, 6 listopada 2012 10:48:21 UTC użytkownik AK napisał:

    > Nie buraku i (jak widac) niedouku.
    >
    > Takie porownania _zawsze_ robi sie np. w ten sposob.
    >
    >
    >
    > int fp
    >
    > a > b (a - b) > EPS
    >
    > a < b (a - b) > -EPS
    >
    > a >= b (a - b) >= -EPS
    >
    > a <= b (a - b) <= EPS
    >
    > a == b fabs(a - b) <= EPS
    >
    > a != b fabs(a - b) > EPS

    Nie jestem przekonany do tego, ze tak sie powinno robic ZAWSZE. Jezeli mam kod:

    if (a >= 0) {
    b = sqrt(a);
    } else {
    // zglos blad ze a ujemne
    }

    to zastepowanie "a >= 0" przez "a >= EPS" nie ma sensu.

    RW


  • 69. Data: 2012-11-06 13:32:31
    Temat: Re: B dny epsilon - this is not a bug, this is ?
    Od: Roman W <r...@g...com>

    W dniu wtorek, 6 listopada 2012 11:03:09 UTC użytkownik Michoo napisał:
    > On 06.11.2012 11:31, AK wrote:
    >
    > > Poniewaz inline to tylko sugestia a nie oblig, wiec w praktyce moga (i
    >
    > > dzieja sie)
    >
    > > "cuda" np. w debug sa inne wyniki fp niz w release, niektore funkcje po
    >
    > > dodaniu
    >
    > > niewinnej linijki daja daja nieco inne wyniki itp itd.
    >
    >
    >
    > boost::Interval Arithmetic Library - wychodzi ~2x wolniej, ale pozwala
    >
    > całkiem nieźle oszacować, czy uzyskany wynik jest czymś więcej niż
    >
    > nagromadzeniem błędów obliczeniowych.

    Da sie to "wrzucic" do starego kodu bez zmudnego przepisywania kazdej linijki?

    RW


  • 70. Data: 2012-11-06 14:36:50
    Temat: Re: Błędny epsilon - this is not a bug, this is ?
    Od: Michoo <m...@v...pl>

    On 06.11.2012 13:31, Roman W wrote:
    >
    > Nie jestem przekonany do tego, ze tak sie powinno robic ZAWSZE. Jezeli mam kod:
    >
    > if (a>= 0) {

    Ale to jest porównanie ze stałą a nie porównanie dwóch liczb.

    --
    Pozdrawiam
    Michoo

strony : 1 ... 6 . [ 7 ] . 8 ... 19


Szukaj w grupach

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: