
Wpis użytkownika ataxbras w Hydepark
ataxbrasGURU
24piorunów**Błąd zmiennoprzecinkowy**
https://xkcd.com/3228/
Dla laików, liczby zmiennoprzecinkowe w arytmetyce komputerowej nie są dokładne, bo są reprezentowane przy pomocy liczb całkowitych. Stąd, w operacjach arytmetycznych na takich liczbach pojawiają się błędy, zazwyczaj na najmniej znaczących cyfrach danej liczby. W praktyce, te niedokładności mogą się kumulować, co powodowało (i powoduje) problemy w obliczeniach. A czasem ma bardziej konkretne, materialne skutki.
Kanoniczny przykład:
https://www-users.cse.umn.edu/~arnold/disasters/patriot.html
https://cs.nyu.edu/~exact/resource/mirror/patriot.htm
https://www-users.cse.umn.edu/~arnold/disasters/Patriot-dharan-skeel-siam.pdf
Komentarze (9)
@ataxbras Dziękuje za piorunki. Nie prosiłem o nie. Wysyłaj osobą którzy o to proszą. Jeszcze raz dziękuje.. Pzdr. :slightly_smiling_face:
@ataxbras programistą nie zostałem choć znam wybitne narzędzia - nie miałem na to perspektyw. Ale co do zmiennoprzecinkowych liczb "najzabawniejszym" przykładem czym one są są pętelki heh...
@ataxbras ja kiedyś oglądałem modele klimatyczne i tam też były problemy związane z tym że te wartości zmiennoprzecinkowe dawały duży błąd. Modele klimatyczne pisane przez naukowców to ciekawe potworki. To są takie ulepy z wielu języków bo każdy commiter pisze w innym języku a jeszcze można tam spotkać takie perełki jak fortran. Ale nie pamiętam jak ten model klimatyczny się nazywał :grinning:
@DexterFromLab "W całości" odnosi się do tego, że był w całości w Fortranie 90, nie że w całości go audytowałem - było nas razem kilkanaście osób :grinning:
@DexterFromLab Dawno temu, coś koło 2015 roku, audytowałem pewien model klimatyczny pisany w Fortranie 90. W całości. Nie było wtenczas mowy o przepisaniu tego, bo to byłby koszt liczony w milionach USD, a z testowaniem więcej. Ponad 200k linii kodu w głównych modułach (teraz, a właściwie w najbliższej przyszłości, stanie się to łatwiejsze). Model był na swój sposób piękny, ale miał problemy zupełnie innego autoramentu - to znaczy przyjmował stałe dla pewnych wartości zmiennych (i pewnie dalej przyjmuje). Chodziło dla przykładu o wartość pochłaniania podczerwieni. Ograniczało to znacznie możliwości ekstrapolacji w czasie.
O dziwo, nie było problemów z floating point ops, choć były one zarządzane w bardzo dziwny sposób, wielostopniowy (chodzi głównie o zarządzanie błędami i rounding). Ale było to przemyślane. Wersja 90 miała już sensowny double precision, więc nie było tak źle z dokładnością.
Na studiach bawiło mnie to, jak opowiadano o tej sytuacji: "Straszna tragedia", "kosztowała życie wielu osób", "żołnierze US Army zginęli przez ten błąd".
No moment, ale ktoś tu chyba siedział na nie do końca swoim podwórku...
@ataxbras Najlepiej jak firma kupuje jakiś materiał na palety czy rolki, a w produkcji zużywasz sztuki lub metry.
Wszystkie pojedyncze procesy działają ok i już fajrant, ale na koniec miesiąca po zsumowaniu się jednak nie zgadza xD
@zuchtomek No, i to jest niezła analogia do błędów zmiennoprzecinkowych :grinning: