Przeglądając implementację funkcji innego programisty w celu obliczenia CDF o rozkładzie normalnym , zasugerowałem, aby albo zastąpić całą implementację wbudowanymi funkcjami Pythona, albo użyć SciPy, wspólnej biblioteki naukowej.
Inny programista zauważył, że ani math.erfc()
nie scipy.stats.norm.cdf()
zapewnia żadnych gwarancji dokładności w swojej dokumentacji. Dlatego powinienem być bardziej ostrożny przy zastępowaniu algorytmu aproksymacyjnego (który został wzięty z szanowanego źródła i który ma udokumentowane granice błędów ).
Szczerze mówiąc, myśl, by wątpić w dokładność i precyzję funkcji wbudowanej lub bibliotecznej, nigdy nie przyszła mi do głowy. Po tym wszystkim, byłem wywoływania funkcji jak sin()
i sqrt()
przez wiele lat bez zastanowienia - dlaczego powinien math.erf()
albo scipy.stats.norm.cdf()
być inna?
Ale teraz się martwię. Moje pytania to:
- Zasadniczo, jeśli w dokumentacji nie ma żadnej szczególnej wzmianki, oznacza to, że tego rodzaju funkcje są całkowicie dokładne z dokładnością do ostatniego miejsca po przecinku, w ramach precyzji oferowanej przez zmiennoprzecinkowy podwójnej precyzji IEEE?
- Czy dotyczy
math.erf()
toscipy.stats.norm.cdf()
w szczególności Pythona lub SciPy ? Jak możesz powiedzieć? Ta strona
sin()
podręcznika dla mówi…Funkcje te mogą stracić dokładność, gdy ich argument jest bliski wielokrotności liczby pi lub jest daleki od 0,0.
Dlaczego takie zastrzeżenia powinny istnieć, skoro funkcja sinusoidalna jest okresowa i symetryczna? Wydaje się, że na dzwoniącego spoczywa ciężar kanonizacji danych wejściowych w celu uzyskania optymalnej dokładności.
Z drugiej strony dokumentacja Mozilli
Math.sin()
nie mówi nic o dokładności ani precyzji. Czy to oznacza, że jest w pełni dokładny, czy też jest to „powszechna wiedza”, któraMath.sin()
byłaby dokładna tylko w pewnych okolicznościach w JavaScript, jak wszędzie indziej?