Während eines anderen Programmierers Überprüfung Implementierung einer Funktion der Normalverteilung CDF zu berechnen , habe ich einen Vorschlag , um entweder die gesamte Implementierung mit Python eingebauten Funktionen oder verwenden SciPy, eine gemeinsame wissenschaftliche Bibliothek ersetzen.
Ein anderer Programmierer wies darauf hin , dass weder math.erfc()
noch scipy.stats.norm.cdf()
bietet keine Präzision garantiert in ihrer Dokumentation. Daher sollte ich beim Ersetzen eines Approximationsalgorithmus (der aus einer angesehenen Quelle stammt und Fehlergrenzen dokumentiert hat ) vorsichtiger sein .
Um ehrlich zu sein, war mir der Gedanke, an der Genauigkeit und Präzision einer eingebauten oder Bibliotheksfunktion zu zweifeln, nie in den Sinn gekommen. Immerhin habe ich Funktionen wie sin()
und sqrt()
seit Jahren ohne viel Nachdenken aufgerufen - warum sollte math.erf()
oder scipy.stats.norm.cdf()
sollte es anders sein?
Aber jetzt mache ich mir Sorgen. Meine Fragen sind:
- Wenn in der Dokumentation keine besondere Erwähnung gefunden wird, bedeutet dies im Allgemeinen, dass diese Art von Funktionen innerhalb der vom IEEE-Gleitkomma mit doppelter Genauigkeit gebotenen Genauigkeit bis zur letzten Dezimalstelle vollständig genau sind?
- Gilt das insbesondere für Pythons
math.erf()
oder SciPysscipy.stats.norm.cdf()
? Woran erkennst du das? Diese Manpage für
sin()
sagt ...Diese Funktionen können an Genauigkeit verlieren, wenn ihr Argument nahe einem Vielfachen von pi liegt oder weit von 0,0 entfernt ist.
Warum sollten solche Vorbehalte bestehen, wenn die Sinusfunktion periodisch und symmetrisch ist? Es scheint eine Belastung für den Anrufer zu sein, die Eingabe zu kanonisieren, um eine optimale Genauigkeit zu erzielen.
Andererseits
Math.sin()
sagt die Dokumentation von Mozilla nichts über Genauigkeit oder Präzision aus. Bedeutet das, dass es vollständig korrekt ist, oder ist es "allgemein bekannt", dassMath.sin()
es unter bestimmten Umständen in JavaScript nur genau ist, wie überall sonst?