Article View: pl.comp.lang.python
Article #28605Re: Martwa grupa?
From: AK
Date: Sat, 17 Feb 2018 19:29
Date: Sat, 17 Feb 2018 19:29
68 lines
4507 bytes
4507 bytes
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
Technical Details
Message-ID:
<p69vsn$67v$1@gioia.aioe.org>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!news.nask.pl!news.nask.org.pl!news.unit0.net!news.mixmin.net!aioe.org!.POSTED!not-for-mailReferences:
<5a7d67d3$0$566$65785112@news.neostrada.pl> <5ce2d437-0c82-4cc2-8ca4-a2eb188237b7@googlegroups.com> <5a7d7652$0$665$65785112@news.neostrada.pl> <1w9lbxu5j97oe.dlg@tyczka.com> <5a7d8ff9$0$675$65785112@news.neostrada.pl> <1bjuq22x745gf$.dlg@tyczka.com> <5a7d9749$0$668$65785112@news.neostrada.pl> <506f1997-6b94-4c64-9e25-2c022f5aac62@googlegroups.com> <almarsoft.4582477572672930050@news.v.pl> <p67qh7$qfc$1@gioia.aioe.org> <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>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!news.nask.pl!news.nask.org.pl!news.unit0.net!news.mixmin.net!aioe.org!.POSTED!not-for-mail From: "AK" <nobody@nowhere.net> Newsgroups: pl.comp.lang.python Subject: Re: Martwa grupa? Date: Sat, 17 Feb 2018 20:29:51 +0100 Organization: Aioe.org NNTP Server Lines: 69 Message-ID: <p69vsn$67v$1@gioia.aioe.org> References: <5a7d67d3$0$566$65785112@news.neostrada.pl> <5ce2d437-0c82-4cc2-8ca4-a2eb188237b7@googlegroups.com> <5a7d7652$0$665$65785112@news.neostrada.pl> <1w9lbxu5j97oe.dlg@tyczka.com> <5a7d8ff9$0$675$65785112@news.neostrada.pl> <1bjuq22x745gf$.dlg@tyczka.com> <5a7d9749$0$668$65785112@news.neostrada.pl> <506f1997-6b94-4c64-9e25-2c022f5aac62@googlegroups.com> <almarsoft.4582477572672930050@news.v.pl> <p67qh7$qfc$1@gioia.aioe.org> <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> NNTP-Posting-Host: jHM0fgmX8PLRSmVRRAzYag.user.gioia.aioe.org Mime-Version: 1.0 X-Complaints-To: abuse@aioe.org X-Notice: Filtered by postfilter v. 0.8.3 X-Antivirus: Avast (VPS 180217-2, 2018-02-17), Outbound message X-Priority: 3 X-MSMail-Priority: Normal X-Antivirus-Status: Clean X-Newsreader: Microsoft Windows Mail 6.0.6002.18197 X-MimeOLE: Produced By Microsoft MimeOLE V6.0.6002.19694 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit