-
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
- 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?
- sprawdzanie słów kluczowych dot. zła
- Re: W czym sie teraz pisze programy??
Najnowsze wątki
- 2025-03-05 Środa Wielkopolska => Konsultant wewnętrzny SAP FI/CO <=
- 2025-03-05 Zielona Góra => Senior Field Sales (system ERP) <=
- 2025-03-05 Warszawa => Data Engineer (Tech Lead) <=
- 2025-03-05 Kraków => Business Development Manager - Network and Network Security
- 2025-03-05 Zaniepokojeni mieszkańcy
- 2025-03-05 Ile pieniędzy ma bank?
- 2025-03-05 Ostrów Świętokrzy => Node.js / Fullstack Developer <=
- 2025-03-05 Białystok => Architekt rozwiązań (doświadczenie w obszarze Java, A
- 2025-03-05 Warszawa => Frontend Developer (Angular13+) <=
- 2025-03-05 Warszawa => Frontend Developer (obszar Angular13+) <=
- 2025-03-05 Chiny-Kraków => Backend Developer (Node + Java) <=
- 2025-03-05 Warszawa => JavaScript / Node / Fullstack Developer <=
- 2025-03-05 China-Kraków => Key Account Manager IT <=
- 2025-03-05 China-Kraków => Senior PHP Symfony Developer <=
- 2025-03-05 Gdańsk => Specjalista ds. Sprzedaży <=