Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > pl.comp.lang.python > #104
| From | "AK" <nobody@nowhere.net> |
|---|---|
| Newsgroups | pl.comp.lang.python |
| Subject | Re: Martwa grupa? |
| Date | 2018-02-17 20:29 +0100 |
| Organization | Aioe.org NNTP Server |
| Message-ID | <p69vsn$67v$1@gioia.aioe.org> (permalink) |
| References | (10 earlier) <almarsoft.8819544339485526967@news.v.pl> <p690ps$ck4$1@gioia.aioe.org> <almarsoft.8137023269573244304@news.v.pl> <p69ig8$1anq$1@gioia.aioe.org> <almarsoft.2189709423721289494@news.v.pl> |
Użytkownik "slawek" <fake@fakeemail.com> napisał:
> A ustawianie odcięcia na 1E-20 gdy zakres jest do 1E-308 to delikatnie ujmując jest
> nieodpowiednie.
Przeciez jasne (moze nie dla Ciebie?:) ze porownujemuy roznicę ?
Nie wiem jak ciebie uczono, ale mnie uczono (pierwszy raz w
ksiazce prof.Sysły "Algorytmy optymalizacji w jezyku Algol60"),
ze zasada pracy na liczbach fp to _wlasciwie bez wyjatku_ porownania
"nieostre" (czyli z zalozonym EPS):
Czyli jak porownujemy liczby FP? Ano zawsze tak:
a == b => abs(a - b) <= EPS
a < b => (a - b) < -EPS
a <= b => (a - b) <= EPS
a > b => (a - b) > EPS
a >= b => (a - b) >= -EPS
gdzie EPS to gory zalozona dokladnosc i mniejsza _przynajmniej_ o rzad/dwa,
(a tak naprawde mocno zalezna od "bledogennosci" - zaokraglenia/kumulacja bledow
obliczen itp - wykonywanych obliczen) od rzedu dokladnosci/ilosci cyfr znaczacych mantysy.
Mamy na IEEE double ~17 cyfr znaczacych mantysy czyli EPS minimalna to <= 1.0E-15.
No i teraz sobie podstaw:
a = 0.0
b = 1.0E-20
do: a == b => abs(a - b) <= EPS
abs(0.0 - 1.0E-20) <= 1.0E-15
1.0E-20 <= 1.0E-15 # Prawda ci to czy nie ? Czyli a == b.
Koniec kropka.
Ale gdy sobie porownasz:
a = 1.0E-10
b = 1.0E-20
abs(a - b) <= EPS => 9.999999999e-11 !<= 1.0E-15 # czyli a != b
PS: Pamietam dobrze z "moich czasow" pewien projekt obliczeniowy
wykonany przez Szacowna Woskowa Uczelnie dla przemyslu.
Projekt/program dzialal tylko dla załaczonych przykladowych danych.
Dla zadnych innych nie /nie byl zbiezny/ :)
Miedzy innymi z powodu takich (choc nie tylko) kwiatkow.
No i potem musieli dlugi czas zwykli programisci poprawiac mozolnie
(a tak naprawde w duzym stopniu przepisac/napisac od nowa)
"dzieło" (nie darmowe bynajmniej:) Panow Akademikow rodem z LWP.
Ze juz o rachunkach 0.0zl czy bankowym zadluzeniu 0.0zl nie wspomne :)
PS1: Nie zawsze teoretycznie mamy IEEE. Na rzeczonej Odrze
czy Merze (czy nawet na PC-tach w poczatkowym okresie w
kompilatorach MS-sa) liczby FP wcale nie byly IEEE-owe
wiec nawet zalozenie o tych 17 cyfrach znaczacyh mantysy nie jest
bezwzgledniee jedynie sluszne.
PS2: A wystarczy przyjac prosta zasade:
_Jakiekolwiek_ liczby FP sa z zadady niedokladne.
Nawet po prostej operacji: b = a + 0.0 - 0.0 nie mozna
przyjac ze pozniejsze "sztywne" porownanie a == b da prawdę.
PS3: A ta naprawde/w praktyce to porownuje sie z reguly w numeryce
_wzgledną_ roznicę liczb FP. Zasada z EPS pozostaje jednak wciaz aktualna.
PS4: Wlasnie Python wyszedl na przeciw wiekszosci "nieswiadomym" dzis
uzytkownikom FP i zaimplementowal wewnetrzenie nieco bardziej lagodny
algorytm porownywania/wyswietlania/zaokraglana przy operacjach liczb fp niz
taki "na surowo" czyli ze nieco czesciej a == b dziala dobrze nawet jesli liczby
nie sa stricte/co do bita mantysy takie same.
Stad zapewne to, ze 1.0e-20 == 0.0, choc osobiscie nie wierze
bo w czystym Pythonie akurat ta operacja daje False.
AK
Back to pl.comp.lang.python | Previous | Next — Previous in thread | Next in thread | Find similar
Martwa grupa? Robert Wańkowski <robwan@wp.pl> - 2018-02-09 10:20 +0100
Re: Martwa grupa? szykcech@gmail.com - 2018-02-09 02:05 -0800
Re: Martwa grupa? Robert Wańkowski <robwan@wp.pl> - 2018-02-09 11:22 +0100
Re: Martwa grupa? Marcin Konarski <amok@codestation.org> - 2018-02-09 10:31 +0000
Re: Martwa grupa? Roman Tyczka <noemail@because.no> - 2018-02-09 12:55 +0100
Re: Martwa grupa? Robert Wańkowski <robwan@wp.pl> - 2018-02-09 13:11 +0100
Re: Martwa grupa? Roman Tyczka <noemail@because.no> - 2018-02-09 13:33 +0100
Re: Martwa grupa? Robert Wańkowski <robwan@wp.pl> - 2018-02-09 13:42 +0100
Re: Martwa grupa? szykcech@gmail.com - 2018-02-09 05:59 -0800
Re: Martwa grupa? amorawski@magna-power.com - 2018-02-09 07:15 -0800
Re: Martwa grupa? szykcech@gmail.com - 2018-02-09 08:16 -0800
Re: Martwa grupa? Adam M <amorawski@magna-power.com> - 2018-02-09 08:38 -0800
Re: Martwa grupa? slawek <fake@fakeemail.com> - 2018-02-16 19:22 +0100
Re: Martwa grupa? szykcech@gmail.com - 2018-02-09 08:19 -0800
Re: Martwa grupa? Adam M <amorawski@magna-power.com> - 2018-02-09 08:41 -0800
Re: Martwa grupa? szykcech@gmail.com - 2018-02-09 09:41 -0800
Re: Martwa grupa? slawek <fake@fakeemail.com> - 2018-02-16 19:24 +0100
Re: Martwa grupa? Cezary Grądys <czarekgr@wa.onet.pl> - 2018-02-17 23:08 +0100
Re: Martwa grupa? szykcech@gmail.com - 2018-02-18 03:21 -0800
Re: Martwa grupa? Cezary Grądys <czarekgr@wa.onet.pl> - 2018-02-18 23:25 +0100
Re: Martwa grupa? slawek <fake@fakeemail.com> - 2018-02-18 15:25 +0100
Re: Martwa grupa? slawek <fake@fakeemail.com> - 2018-02-16 19:20 +0100
Re: Martwa grupa? slawek <fake@fakeemail.com> - 2018-02-16 19:10 +0100
Re: Martwa grupa? "AK" <nobody@nowhere.net> - 2018-02-17 00:46 +0100
Re: Martwa grupa? slawek <fake@fakeemail.com> - 2018-02-17 08:49 +0100
Re: Martwa grupa? "AK" <nobody@nowhere.net> - 2018-02-17 11:39 +0100
Re: Martwa grupa? "AK" <nobody@nowhere.net> - 2018-02-17 12:15 +0100
Re: Martwa grupa? slawek <fake@fakeemail.com> - 2018-02-17 14:29 +0100
Re: Martwa grupa? "AK" <nobody@nowhere.net> - 2018-02-17 14:43 +0100
Re: Martwa grupa? slawek <fake@fakeemail.com> - 2018-02-17 15:04 +0100
Re: Martwa grupa? "AK" <nobody@nowhere.net> - 2018-02-17 16:49 +0100
Re: Martwa grupa? slawek <fake@fakeemail.com> - 2018-02-17 14:46 +0100
Re: Martwa grupa? "AK" <nobody@nowhere.net> - 2018-02-17 16:41 +0100
Re: Martwa grupa? slawek <fake@fakeemail.com> - 2018-02-17 17:16 +0100
Re: Martwa grupa? "AK" <nobody@nowhere.net> - 2018-02-17 20:29 +0100
Re: Martwa grupa? "AK" <nobody@nowhere.net> - 2018-02-17 21:00 +0100
Re: Martwa grupa? "AK" <nobody@nowhere.net> - 2018-02-17 21:22 +0100
Re: Martwa grupa? slawek <fake@fakeemail.com> - 2018-02-18 14:49 +0100
Re: Martwa grupa? "AK" <nobody@nowhere.net> - 2018-02-18 16:07 +0100
Re: Martwa grupa? slawek <fake@fakeemail.com> - 2018-02-18 15:16 +0100
Re: Martwa grupa? "AK" <nobody@nowhere.net> - 2018-02-18 16:26 +0100
Re: Martwa grupa? "AK" <nobody@nowhere.net> - 2018-02-17 21:38 +0100
Re: Martwa grupa? slawek <fake@fakeemail.com> - 2018-02-17 14:56 +0100
Re: Martwa grupa? "AK" <nobody@nowhere.net> - 2018-02-17 16:43 +0100
Re: Martwa grupa? slawek <fake@fakeemail.com> - 2018-02-17 17:25 +0100
Re: Martwa grupa? "AK" <nobody@nowhere.net> - 2018-02-17 20:34 +0100
Re: Martwa grupa? "AK" <nobody@nowhere.net> - 2018-02-10 11:37 +0100
Re: Martwa grupa? Robert Wańkowski <robwan@wp.pl> - 2018-02-10 11:47 +0100
Re: Martwa grupa? "AK" <nobody@nowhere.net> - 2018-02-11 17:54 +0100
Re: Martwa grupa? szykcech@gmail.com - 2018-02-11 11:45 -0800
Re: Martwa grupa? Roman Tyczka <noemail@because.no> - 2018-02-11 21:40 +0100
Re: Martwa grupa? szykcech@gmail.com - 2018-02-11 13:13 -0800
Re: Martwa grupa? "AK" <nobody@nowhere.net> - 2018-02-12 10:37 +0100
Re: Martwa grupa? "AK" <nobody@nowhere.net> - 2018-02-12 10:43 +0100
Re: Martwa grupa? m <mvoicem@gmail.com> - 2018-02-12 13:47 +0100
Re: Martwa grupa? slawek <fake@fakeemail.com> - 2018-02-16 19:33 +0100
Re: Martwa grupa? slawek <fake@fakeemail.com> - 2018-02-16 19:25 +0100
Re: Martwa grupa? Robert Wańkowski <robwan@wp.pl> - 2018-02-09 18:44 +0100
Re: Martwa grupa? slawek <fake@fakeemail.com> - 2018-02-16 19:56 +0100
Re: Martwa grupa? Robert Wańkowski <robwan@wp.pl> - 2018-02-16 20:15 +0100
Re: Martwa grupa? "AK" <nobody@nowhere.net> - 2018-02-16 23:55 +0100
Re: Martwa grupa? slawek <fake@fakeemail.com> - 2018-02-17 07:51 +0100
Re: Martwa grupa? Roman Tyczka <noemail@because.no> - 2018-03-12 14:50 +0100
csiph-web