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?
quelle
Antworten:
Ich würde diese Annahme nicht machen.
Bei meiner Arbeit beschäftigen wir uns mit Telemetriedaten, und es ist allgemein bekannt, dass zwei verschiedene Mathematikbibliotheken zwei unterschiedliche Ergebnisse liefern können, selbst wenn beide den IEEE-Gleitkomma-Standards entsprechen. Dies hat Auswirkungen, wenn Sie versuchen, eine Berechnung zu wiederholen und zwei Ergebnisse auf Gleichheit zu vergleichen.
Das ist eine faire Einschätzung. Was es akzeptabel macht, ist, dass die Dokumentation dies angibt, so dass es keine Überraschungen gibt.
Ich schlage vor, dass Sie einige Berechnungen in jeder Bibliothek oder Programmiersprache versuchen (insbesondere in der Nähe der Grenzbereiche wie in der
sin()
Nähe eines Vielfachen vonpi
) und diese vergleichen. Dies sollte Ihnen eine gute Vorstellung davon geben, welche Art von Verhalten Sie von jedem einzelnen erwarten können.quelle