-
11. Data: 2012-11-01 18:58:01
Temat: Re: Błędny epsilon - this is not a bug, this is ?
Od: kenobi <p...@g...com>
W dniu czwartek, 1 listopada 2012 18:19:27 UTC+1 użytkownik slawek napisał:
> Użytkownik "bartekltg" napisał w wiadomości grup
>
> dyskusyjnych:k6u98u$fjc$...@n...news.atman.pl...
>
>
>
> >To, że nie rozumies,z jak używać liczb zmiennoprzecinkowych,
>
> >też. Nie każdy musi.
>
>
>
> Sam jesteś tego najlepszym przykładem: gdy zapytać się ciebie o konkret i
>
> poprosić o konstruktywne wyjaśnienie - udajesz obrażoną pensjonarkę. Swoją
>
> drogą, jakoś tak nie widziałem (ale pewnie nie pamiętam lub nie zauważyłem)
>
> abyś kiedykolwiek podał jakiś sensowny sposób rozwiązania jakiegokolwiek
>
> problemu. Dobry jesteś tylko w FUD i PR, reszta to jakaś taka mglista.
>
>
>
> >Ale chamstwa tolerować nie będę.
>
>
>
> Źle cię oceniłem - myślałem "weźmie się Bartuś ujmie ambicją i honorem... i
>
> hasło w Wikipedii poprawi... będzie pożytek dla Ludzkości". Ale widzę że
>
> ambicji bardzo dużo, wiedzy trochę mało, pracowitości nic a nic, co do
>
> honoru... nawet nie ma o czym pisać.
>
>
>
> Teraz widzę że już pożytku z pana hrabiego (galicyjskiego) nie będzie.
hehe, nie ma sie co tak spinać (choć kawałek
"(o-wielki-i-wspaniały-Bartusiu)" był całkiem niezły)
To co wy tu piszcie nie podchodzi mz
pod trolowanie, ja za bucerkę/dresiarstwo
uważam tzw dresiarskie (zupenie niemerytoryczne) dowalactwo.
Z tym epsilonem to ciekawa sprawa, faktycznie
mz moze być użyteczne i dobrze ze jest
zdefiniowane i dobrze też sie troche na tym
znac i przemyslec te sprawy, sam jednak
nie moge sie teraz zbytnio nad tym zastanowic
bo jetsem cholernie zmeczony i obolały
pozatym psuje mi sie maszyna (ale bedzie
trzeba wrocic do tego bo ta badz co badz
fundamenty)
-
12. Data: 2012-11-01 19:09:56
Temat: Re: Błędny epsilon - this is not a bug, this is ?
Od: kenobi <p...@g...com>
ale tak wogole, oczywista kwestia, czy tego epsilona nie 'zna' sie norrmalnie tj po
prostu
jako 1 podzielic przez 2 do potegi 52 czy cos
w tym stylu - choc fpu to z tego co wiem to
wogole troche skomplikowana sprawa bo sa
rozne konfigurowalne stany 9np precyzja)
eogole z tego co kojarze to kompilatory
zdaje sie byc moze bez problmu obslugują
tzw typ long double
long double x = 1.0;
(wieadomo 80 bit) mimo ze sie tego w kodach rzadko uzywa mozliwe ze wiekszosc
kompilatorow to po prostu normalnie obslugują
ktos wie jak to z tym jest?
-
13. Data: 2012-11-01 19:52:04
Temat: Re: Błędny epsilon - this is not a bug, this is ?
Od: "slawek" <h...@s...pl>
Użytkownik "kenobi" napisał w wiadomości grup
dyskusyjnych:b02b8c1e-999e-44e5-a69e-056c295366f1@go
oglegroups.com...
>To co wy tu piszcie nie podchodzi mz
>pod trolowanie, ja za bucerkę/dresiarstwo
>uważam tzw dresiarskie (zupenie niemerytoryczne) dowalactwo.
Nie lubię dryfów w kierunku przemocy (nie bawi mnie BDSM, nie bawi mnie
"bicie linijką po łapach" itd.), nie lubię dryfów nt. "syf" (syfilis jest
względnie łatwo wyleczalny, no i - jak każda choroba - nie ma w sobie nic
śmiesznego), nie wymyślam od "chamów" (znając przypadkiem Kodeks Boziewicza
i mając przodków... takich jakich miałem), staram się być w miarę rzeczowy i
pomocny. Nie używam też takich słów jak, wyjątkowo zacytuję, "kurde".
Nawet zdziwię cię może - argumentacja Bartka nt. epsilona (tj. ściśle
merytoryczna jej część) moim zdaniem zasługuje na to, aby poprawić hasło w
Wikipedii i paru innych źródłach. W tym w Numerical Recipes, Teukolskyego et
al. (tak, w nowym wydaniu - co można sprawdzić online - jest definicja
epsilona jako "The smallest (in magnitude) number... produces result
different from 1.0" ) - co łatwo można sprawdzić on-line (strona 10., sekcja
1.1.2.). www.nr.com
O ile oczywiście Teukolsky i współautorzy podzielą opinię Bartka.
>Z tym epsilonem to ciekawa sprawa, faktycznie
>mz moze być użyteczne i dobrze ze jest
>zdefiniowane i dobrze też sie troche na tym
Zaczynając wątek napisałem, że nie ma wielkiego sensu pisać "wszystkich cyfr
epsilona" - raczej rząd wielkości jest istotny. Niemniej jednak jest pewne
niechlujstwo w tym co jest we float.h do MS Visual Studio - definicja nie
wytrzymuje ujemnych liczb, wynik nie odpowiada temu czym ma być według
definicji.
>znac i przemyslec te sprawy, sam jednak
>nie moge sie teraz zbytnio nad tym zastanowic
>bo jetsem cholernie zmeczony i obolały
Bywa. Nie ma jednak co się zbyt skupiać nad "problemem z epsilonem" - są
ważniejsze sprawy. Może po prostu najważniejsza nauka z tego jest, aby
zamiast magicznych stałych zapisanych przez #define - zawsze wszystko
wyliczać samemu? Potrzebujemy takiego najmniejszego eps > 0, że 1.0 + eps >
1.0 ? To policzmy go sobie - a nie ufajmy, że w jakimś pliku float.h czy
podobnym będzie dobra wartość. Choćby dlatego, że kiedyś program może być
uruchamiany na jakiejś innej maszynie, w innej konfiguracji, z zupełnie inną
architekturą.
-
14. Data: 2012-11-01 20:26:32
Temat: Re: Błędny epsilon - this is not a bug, this is ?
Od: kenobi <p...@g...com>
W dniu czwartek, 1 listopada 2012 19:52:09 UTC+1 użytkownik slawek napisał:
> Użytkownik "kenobi" napisał w wiadomości grup
>
> dyskusyjnych:b02b8c1e-999e-44e5-a69e-056c295366f1@go
oglegroups.com...
>
>
>
> >To co wy tu piszcie nie podchodzi mz
>
> >pod trolowanie, ja za bucerkę/dresiarstwo
>
> >uważam tzw dresiarskie (zupenie niemerytoryczne) dowalactwo.
>
>
>
> Nie lubię dryfów w kierunku przemocy (nie bawi mnie BDSM, nie bawi mnie
>
> "bicie linijką po łapach" itd.), nie lubię dryfów nt. "syf" (syfilis jest
>
> względnie łatwo wyleczalny, no i - jak każda choroba - nie ma w sobie nic
>
> śmiesznego), nie wymyślam od "chamów" (znając przypadkiem Kodeks Boziewicza
>
> i mając przodków... takich jakich miałem), staram się być w miarę rzeczowy i
>
> pomocny. Nie używam też takich słów jak, wyjątkowo zacytuję, "kurde".
>
>
>
> Nawet zdziwię cię może - argumentacja Bartka nt. epsilona (tj. ściśle
>
> merytoryczna jej część) moim zdaniem zasługuje na to, aby poprawić hasło w
>
> Wikipedii i paru innych źródłach. W tym w Numerical Recipes, Teukolskyego et
>
> al. (tak, w nowym wydaniu - co można sprawdzić online - jest definicja
>
> epsilona jako "The smallest (in magnitude) number... produces result
>
> different from 1.0" ) - co łatwo można sprawdzić on-line (strona 10., sekcja
>
> 1.1.2.). www.nr.com
>
>
>
> O ile oczywiście Teukolsky i współautorzy podzielą opinię Bartka.
>
>
>
> >Z tym epsilonem to ciekawa sprawa, faktycznie
>
> >mz moze być użyteczne i dobrze ze jest
>
> >zdefiniowane i dobrze też sie troche na tym
>
>
>
> Zaczynając wątek napisałem, że nie ma wielkiego sensu pisać "wszystkich cyfr
>
> epsilona" - raczej rząd wielkości jest istotny. Niemniej jednak jest pewne
>
> niechlujstwo w tym co jest we float.h do MS Visual Studio - definicja nie
>
> wytrzymuje ujemnych liczb, wynik nie odpowiada temu czym ma być według
>
> definicji.
>
>
>
> >znac i przemyslec te sprawy, sam jednak
>
> >nie moge sie teraz zbytnio nad tym zastanowic
>
> >bo jetsem cholernie zmeczony i obolały
>
>
>
> Bywa. Nie ma jednak co się zbyt skupiać nad "problemem z epsilonem" - są
>
> ważniejsze sprawy. Może po prostu najważniejsza nauka z tego jest, aby
>
> zamiast magicznych stałych zapisanych przez #define - zawsze wszystko
>
> wyliczać samemu? Potrzebujemy takiego najmniejszego eps > 0, że 1.0 + eps >
>
> 1.0 ? To policzmy go sobie - a nie ufajmy, że w jakimś pliku float.h czy
>
> podobnym będzie dobra wartość. Choćby dlatego, że kiedyś program może być
>
> uruchamiany na jakiejś innej maszynie, w innej konfiguracji, z zupełnie inną
>
> architekturą.
nie czytalem chasla w wiki i nie bardzop che
mi sie tez sledzic kto co tu powiedzial, juz
lepiej sie zastanowic nad samym tym epsilonem
czy ten epsilon (2.2? 1.1?) to jest moze po prostu 'roznica' miedzy kolejnymi
doublemi
czy to jest pól tej róznicy czy co? Ile wynosi
róznica miedzy doublami w epsilonach? ta roznica jest chyba stała, czy tez wchodza tu
jakies komplikacje powodujace ze licZyc sie moze cos innego niz ziarnistosc double?
(mozliwe ze to juz jest tu napisane ale nie mialem sily sie wglebiac)
-
15. Data: 2012-11-01 21:24:13
Temat: Re: Błędny epsilon - this is not a bug, this is ?
Od: "slawek" <h...@s...pl>
Użytkownik "kenobi" napisał w wiadomości grup
dyskusyjnych:a8bc94f7-d49a-40e5-875e-8a1e51abe57a@go
oglegroups.com...
> czy ten epsilon (2.2? 1.1?) to jest moze po prostu 'roznica' miedzy
> kolejnymi doublemi
>czy to jest pól tej róznicy czy co? Ile wynosi
Celna uwaga.
Ja "od zawsze" jakoś tak byłem przyzwyczajony (epsilonowo-deltowa definicja
granicy funkcji), że epsilon to "coś małego", takie że owszem nie jest to
zero, ale w istocie rzeczy jest to najmniejsza wartość jaka da się użyć w
obliczeniach. Kwestia jak zapisane są liczby (dwójkowo, trójkowo, czy może
analogowo np. napięcie elektryczne) - to zupełnie inny problem. Czyli
definicja sup { epsilon in R : 1+epsilon > 1 } wydaje mi się zupełnie
naturalna i zrozumiała nawet dla 10-latka. Oraz najbardziej przydatna - nie
interesuje mnie, co za krasnale siedzą w CPU/FPU/APU - byle liczyły "jak
trzeba".
Oczywiście dla hodowców krasnali - tj. dla konstruktorów procesorów itd. -
epsilon może być równy matematycznie pojętej różnicy pomiędzy liczbą 1
zapisaną w (no w czym, FPU czy RAM?)... a najmniej różną od niej liczbą
nieco większą. "Matematycznie pojętą" oznacza, że nie musi być tak, ze da
się policzyć (1+epsilon) - 1 na danej maszynce (tj. w FPU) - ale, że
teoretycznie tyle.
Tyle że w float.h jest wprost napisany warunek 1.0 + x != 1.0 .
Niechlujstwo jest w tym, że jak damy x = -10.0, to wychodzi 1.0 + (-10.0)
czyli w przybliżeniu -9.0. A w przybliżeniu dlatego, że FPU trochę
zaokrągli. W każdym razie warunek z definicji będzie spełniony. Ale
oczywiście to jest czepialstwo, bo "wiadomo o co chodzi". Że ma być x > 0.
czyli dodatnie.
Mniej oczywistym błędem jest to, że liczba double x = 1.111E-16 też daje 1.0
+ x != 1.0, czyli spełnia warunek. Natomiast MS uważa że epsilon > 2.22E-16
.
I możemy się spierać, jak zdefiniować epsilon - ale po prostu to co jest we
float.h jest wewnętrznie sprzeczne.
A teraz wiki - w tym samym haśle jest jednocześnie, że epsilon jest równe
1.11E-16 i że jest równe 2.22E-16. Nieważne jak definiujemy epsilon - ale
ponieważ 1.11E-16 != 2.22E-16 (w sensie matematycznym i w sensie FPU też) -
to znaczy, że w Wikipedii (EN) jest pomyłka. Albo w jednym miejscu, albo w
drugim, albo w obu. To logiczne (jak mawiał Spock).
Jeszcze o roli epsilona. Gdy służy do np. wyboru kroku jako sqrt(epsilon),
to nie ma wielkiego znaczenia, czy jest 1.11E-16 czy 2.22E-16.
Problemy mogą być, gdy np. uznamy że wolno zaokrąglać wartości mniejsze niż
epsilon zapisując je jako konkretnie zero. Albo gdy mniejsze od epsilon*coś.
Tego typu praktyki były w obliczeniach w Mathematica'e swego czasu - jak
część Im(z) < epsilon*coś to uznawało, że liczba jest czysto rzeczywista.
Przy "dobrym epsilon" zaokrąglenie w zero jest sensowne. Przy złym - będą
błędy. Jak duże? A to już zależy od szczegółów. Podobnie jak to było z
"Pentium bug".
-
16. Data: 2012-11-01 21:30:24
Temat: Re: Błędny epsilon - this is not a bug, this is ?
Od: "slawek" <h...@s...pl>
Użytkownik "slawek" napisał w wiadomości grup
dyskusyjnych:5092da70$0$1225$6...@n...neostrada
.pl...
definicja epsilon = inf { x in R : 1 + x > 1 } === sup { x in R : 1 + x
== 0 }
-
17. Data: 2012-11-01 23:23:21
Temat: Re: Błędny epsilon - this is not a bug, this is ?
Od: "slawek" <h...@s...pl>
Użytkownik "slawek" napisał w wiadomości grup
dyskusyjnych:5092da70$0$1225$6...@n...neostrada
.pl...
definicja epsilon = inf { x in R : 1 + x > 1 } === sup { x in R : 1 + x
== 1 }
-
18. Data: 2012-11-02 09:05:33
Temat: Re: Błędny epsilon - this is not a bug, this is ?
Od: "AK" <n...@n...com>
Użytkownik "slawek" <h...@s...pl> napisał:
> Jednak zaglądając do float.h w MS VS C++ można znaleźć definicję DBL_EPSILON, wraz
ze stosownym
> komentarzem, 2.22044604925031310000E-016. Jest to niemal 2 razy więcej, niż
naprawdę wynosi
> epsilon (obliczony właśnie programem skompilowanym w MSVS C++).
I bardzo dobrze, ze 2 razy wiecej.
AK.
-
19. Data: 2012-11-02 09:08:36
Temat: Re: Błędny epsilon - this is not a bug, this is ?
Od: "AK" <n...@n...com>
Użytkownik "bartekltg" <b...@g...com> napisał:
> Błędem jest w ogóle działanie na takich zakresach.
> To chyba podstawy 'numerków'.
Ano wlasnie ! (slowem sedno).
AK
-
20. Data: 2012-11-02 09:37:24
Temat: Re: Błędny epsilon - this is not a bug, this is ?
Od: "AK" <n...@n...com>
Użytkownik "slawek" <h...@s...pl> napisał:
> Bywa. Nie ma jednak co się zbyt skupiać nad "problemem z epsilonem" - są ważniejsze
sprawy. Może
> po prostu najważniejsza nauka z tego jest, aby zamiast magicznych stałych
zapisanych przez
> #define - zawsze wszystko wyliczać samemu? Potrzebujemy takiego najmniejszego eps >
0, że 1.0 +
> eps > 1.0 ? To policzmy go sobie - a nie ufajmy, że w jakimś pliku float.h czy
podobnym będzie
> dobra wartość.
POLICZMY !!?
Niby po co ?
Wystarczy miec orientacje o rzedzie "maszynowego" epsilona.
Potem go pomnozyc _przynajmniej_ prze 100 ;) i uzywac
w _normalnej_ (a nie skrajnej) numeryce.
> Choćby dlatego, że kiedyś program może być uruchamiany na jakiejś
> innej maszynie, w innej konfiguracji, z zupełnie inną architekturą.
No wlasnie. I co wtedy ?
Skad niby wiadomo, ze tam bedzie w ogole IEEE ?
Mowie to jako programista pracujacy jeszcze na Odrze.
Na tej Odrze podejscie przez ciebie prezentowane
byloby srogo ukarane (nie tylko niedzialaniem programow).
Jedynym z Was dwoch, ktory utrzymal by sie w "pracy" bylby
Bartek.
> a nie ufajmy, że w jakimś pliku float.h czy podobnym będzie dobra wartość.
Tu sie zgadzam w 100%. Mozna pojsc nawet dalej.W ogole ich nie
uzywac/nie zwracac na nie uwagi.
Bo prawdziwy epsilon moj drogi zburaczaly "hrabio" (vide chamski
wtret do Bartka o siostrze - twoich przeprosin nie zauwazylem) _zawsze_
powinno sie dobierac w scislym zwiazku z natura problemu/algorytmu
numerycznego i z natury swej powinien on byc o wiele wyzszy
od precyzji maszynowej.
AK