-
Data: 2012-11-01 14:49:57
Temat: Re: Błędny epsilon - this is not a bug, this is ?
Od: bartekltg <b...@g...com> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]W dniu 2012-11-01 12:08, kenobi pisze:
>>
> Ciekawe, ale dlaczego to jest dokladnie podwojona
> wartosc epsilona? Z poczatku wydawalo mni sie ze slowo double odnosi sie wlasnie do
tego (a nie do typu double) i ze ta podwojna wartosc ma jakiej uzasadnienie
>
Z powodu niedoczytania i niejasnej definicji (definicja w floath.h
jest myląca, ale ta w eps w matalbie powinna wszystko wyjaśnić).
Bierzemy 1 i nasz epsylon_s = 1.11022324691088480000E-16.
Odpalamy:
ee=1.11022324691088480000E-16
a=1+ee
roznica = a-1
Wychodzi:
ee =
1.1102e-016
a =
1.0000
roznica =
2.2204e-016
Odległość między 1 a następną liczbą double wynosi 2.2204e-016,
i to jest prawdziwa dokładność maszynowa.
Dlaczego ten dwa razy mniejszy działa dla 'testu' 1+eps != 1?
Koprocesor Zaokrąglanie. Koprocesor działa na ciut dłuższych
liczbach niż 64bity (80bitów na x86) dodaje bez problemu 1 do
epsylona sławka, następnie rzutuje na double. A, że jest w połowie
drogi do następnej liczby zapisywalnej w double, zaokrągla w górę.
I różnica wychodzi 2.2204e-016.
Ale nie znajdziesz takiej liczby x>1, aby |x-1|= 1.1102e-016
Co bardziej zasługuje na nazwę epsylon maszynowy,
1+eps != 1 czy eps = min_{x>1} (x-1)
to dyskusja o wyższości świat przesilenia zimowego na marsie
i rocznicy uśpienia chutuchtu.
I tak używamy raczej liczb typu 100*eps, gdzie to 100 jest bardzo
orientacyjne czy, częściej i większą podbudową teoretyczną, np
sqrt(eps).
Jeśli nasz program 'działa' dla jednego z tych epsyllonów,
a nie "działa" dla drugiego, to i tak trzeba pomyśleć albo
użyć większej precyzji.
A, żeby było zabawniej:
ee=1.11022324691088480000E-16/2 %dwa razy mniej!
a=1-ee
roznica = a-1
ee =
5.5511e-017
a =
1.0000
roznica =
-1.1102e-016
:-)
pzdr
bartekltg
Następne wpisy z tego wątku
- 01.11.12 14:53 bartekltg
- 01.11.12 16:39 slawek
- 01.11.12 16:54 bartekltg
- 01.11.12 17:45 slawek
- 01.11.12 17:50 bartekltg
- 01.11.12 18:18 slawek
- 01.11.12 18:58 kenobi
- 01.11.12 19:09 kenobi
- 01.11.12 19:52 slawek
- 01.11.12 20:26 kenobi
- 01.11.12 21:24 slawek
- 01.11.12 21:30 slawek
- 01.11.12 23:23 slawek
- 02.11.12 09:05 AK
- 02.11.12 09:08 AK
Najnowsze wątki z tej grupy
- "Wuj dobra rada" z KDAB rozważa: Choosing the Right Programming Language for Your Embedded Linux Device
- Nowa ustawa o ochronie praw autorskich - opis problemu i szkic ustawy
- Alg. kompresji LZW
- Popr. 14. Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- Arch. Prog. Nieuprzywilejowanych w pełnej wer. na nowej s. WWW energokod.pl
- 7. Raport Totaliztyczny: Sprawa Qt Group wer. 424
- 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?
Najnowsze wątki
- 2025-04-05 Dziwny wymiar wyroku
- 2025-04-05 Prunt z dachu
- 2025-04-05 Taśma LED
- 2025-04-05 Kraków => MS Dynamics 365BC/NAV Developer <=
- 2025-04-05 Warszawa => Strategic Account Manager <=
- 2025-04-05 co w Anglii dziś w Polsce za 30 lat
- 2025-04-05 Wrocław => SOC Tech Lead <=
- 2025-04-05 Gdynia => Przedstawiciel handlowy / KAM (branża TSL) <=
- 2025-04-05 Wyrok dożywocia dla Polki
- 2025-04-04 Prezydium Sejmu Tuskiego orzekło: Poseł KO mecenas Roman Giertych NIE jest mordercą (w żadnym sensie tego słowa?)
- 2025-04-04 Reset komóry
- 2025-04-04 Lublin => JavaScript / Node / Fullstack Developer <=
- 2025-04-04 Zielonka => Key Account Manager IT <=
- 2025-04-04 Warszawa => Ekspert IT (obszar systemów sieciowych) <=
- 2025-04-04 Warszawa => Mid/Senior IT Recruiter <=