Das nächste, was C tut, um "π" auf eine Weise zu berechnen, die für Anwendungen direkt sichtbar ist, ist acos(-1)
oder ähnlich. Dies geschieht fast immer mit polynomiellen/rationalen Approximationen für die zu berechnende Funktion (entweder in C oder durch den FPU-Mikrocode). Ein interessantes Problem ist jedoch, dass die Berechnung der trigonometrischen Funktionen (sin
, cos
und tan
) eine Reduktion ihres Arguments modulo 2 & pgr; erfordert. Da 2π kein diadikal rational (und nicht einmal rational) ist, kann es nicht in irgendeinem Fließkommatyp dargestellt werden, und daher führt die Verwendung einer Näherung des Werts zu einer katastrophalen Fehlerakkumulation für große Argumente (zB wenn x
1e12
ist und 2*M_PI
unterscheidet sich von 2π durch ε unterscheidet sich dann fmod(x,2*M_PI)
vom richtigen Wert von 2π um bis zu 1E12 * ε/π mal den richtigen Wert von x
mod 2π. das heißt, es.
A die korrekte Umsetzung von C völlig sinnlos ist Die Standard-Mathebibliothek hat einfach eine gigantische sehr hochpräzise Darstellung von π hart codiert in ihrer Quelle, um mit dem Problem der korrekten Argumentreduktion umzugehen (und verwendet einige ausgefallene Tricks, um es nicht ganz so gigantisch zu machen) die meisten/alle C-Versionen der sin
/cos
/tan
Funktionen funktionieren. Bestimmte Implementierungen (wie glibc) sind jedoch dafür bekannt, Assembly-Implementierungen auf einigen CPUs (wie x86) zu verwenden und führen keine korrekte Argumentreduktion durch, was zu völlig unsinnigen Ausgaben führt. (Übrigens ist der falsche asm läuft in der Regel über die gleiche Geschwindigkeit wie die richtige C-Code für kleine Argumente.)
[Die Verwendung von pi, berechnet auf nur 39 Dezimalstellen, würde es erlauben, den Umfang des gesamten Universums mit der Genauigkeit von weniger als dem Durchmesser eines Wasserstoffatoms zu berechnen] (http://danielmiessler.com/blog/the- verrückteste Ding-Youll-überhaupt-lernen-über-pi). 16 Dezimalstellen (ungefähr, was man mit einem "Doppel" erhält) sollten ausreichen, um den Durchmesser des Sonnensystems mit dem Fehler kleiner als eine Haarbreite zu berechnen. – pmg