Większość dialektów Smalltalk implementuje obecnie naiwny niedokładny moduł pływający (fmod / reszta).
Właśnie to zmieniłem, aby poprawić Squeak / Pharo i ewentualnie inne przestrzeganie standardów Smalltalk (IEEE 754, ISO / IEC 10967), tak jak już to zrobiłem w przypadku innych operacji zmiennoprzecinkowych.
Jednak jeśli chodzi o przyjęcie tych zmian, spodziewam się, że przestrzeganie standardu nie wystarczy, aby przekonać moich rówieśników, więc wyjaśnienie, w jakich okolicznościach ta dokładność naprawdę miałaby znaczenie, bardzo by mi pomogło. Do tej pory nie mogłem znaleźć dobrego przykładu.
Czy ktoś tu wie, dlaczego / kiedy / gdzie (w którym algorytmie) taka dokładność modułu miałaby mieć znaczenie?
arithmetic
floating-point
aka.nice
źródło
źródło
Odpowiedzi:
Pamiętaj, że niedokładna implementacja zmiennoprzecinkowa wpływa na pogodę.
Przeprowadzono testy z prognozami pogody z takimi samymi danymi wejściowymi na innym sprzęcie, a prognozy były rozbieżne. Jeśli używasz algorytmu iteracyjnego, mała różnica w zaokrągleniu tutaj lub może spowodować efekt motyla zmieniający światło słoneczne w deszcz.
Zasady zaokrąglania w normach (IEEE 754, ISO / IEC 10967) zostały dokładnie przemyślane, dzięki czemu algorytmy numeryczne zachowują przewidywalność z największą dokładnością i za każdym razem odtwarzają ten sam wynik. Nieprzestrzeganie standardowych algorytmów numerycznych zaprojektowanych dla tych reguł zaokrąglania ulegnie awarii, a algorytmy iteracyjne, takie jak prognozy pogody, mogą nawet dać losowy wynik.
(i czy to nie mówi coś o prognozach pogody? :)
źródło