-
Data: 2012-11-01 21:24:13
Temat: Re: Błędny epsilon - this is not a bug, this is ?
Od: "slawek" <h...@s...pl> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]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".
Następne wpisy z tego wątku
- 01.11.12 21:30 slawek
- 01.11.12 23:23 slawek
- 02.11.12 09:05 AK
- 02.11.12 09:08 AK
- 02.11.12 09:37 AK
- 02.11.12 09:49 slawek
- 02.11.12 10:11 slawek
- 02.11.12 10:45 slawek
- 02.11.12 10:58 Roman W
- 02.11.12 12:28 kenobi
- 02.11.12 12:36 kenobi
- 02.11.12 15:54 slawek
- 02.11.12 15:59 slawek
- 02.11.12 22:05 Michoo
- 03.11.12 10:14 slawek
Najnowsze wątki z tej grupy
- TCL - problem z escape ostatniego \ w nawiasach {}
- Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- testy-wyd-sort - Podsumowanie
- Tworzenie Programów Nieuprzywilejowanych Opartych Na Wtyczkach
- Do czego nadaje się QDockWidget z bibl. Qt?
- Bibl. Qt jest sztucznie ograniczona - jest nieprzydatna do celów komercyjnych
- Co sciaga kretynow
- AEiC 2024 - Ada-Europe conference - Deadlines Approaching
- Jakie są dobre zasady programowania programów opartych na wtyczkach?
- sprawdzanie słów kluczowych dot. zła
- Re: W czym sie teraz pisze programy??
- Re: (PDF) Surgical Pathology of Non-neoplastic Gastrointestinal Diseases by Lizhi Zhang
- CfC 28th Ada-Europe Int. Conf. Reliable Software Technologies
- Młodzi programiści i tajna policja
- Ada 2022 Language Reference Manual to be Published by Springer
Najnowsze wątki
- 2024-11-11 Wyważanie kół rowerowych
- 2024-11-11 Kosz, gdzie??
- 2024-11-11 Coraz mniej ludzi robi prawo jazdy
- 2024-11-11 Opole => SAP HANA Cloud Dev / Data Engineer <=
- 2024-11-11 Warszawa => Spedytor Międzynarodowy <=
- 2024-11-11 Lublin => Senior PHP Developer <=
- 2024-11-11 Marki => Senior PHP Symfony Developer <=
- 2024-11-11 Chrzanów => Team Lead / Tribe Lead FrontEnd <=
- 2024-11-11 Gliwice => Specjalista ds. public relations <=
- 2024-11-11 Gdańsk => Kierownik Działu Spedycji Międzynarodowej <=
- 2024-11-11 Gdańsk => Head of International Freight Forwarding Department <=
- 2024-11-11 Warszawa => Sales Development Representative (in German) <=
- 2024-11-11 Marsz niepodległości
- 2024-11-08 Belka
- 2024-11-09 pierdolec na punkcie psa