Das, was C am nächsten kommt, um π auf eine Weise zu berechnen, die für Anwendungen direkt sichtbar ist, ist acos(-1)oder ähnlich. Dies geschieht fast immer mit polynomialen / rationalen Näherungen für die zu berechnende Funktion (entweder in C oder durch den FPU-Mikrocode).
Allerdings ist eine interessante Frage ist , dass die trigonometrischen Funktionen Berechnung ( sin, cos, und tan) erfordert Reduktion ihres Arguments modulo 2π. Da 2π kein diadisches Rational (und nicht einmal Rational) ist, kann es in keinem Gleitkommatyp dargestellt werden, und daher führt die Verwendung einer Annäherung des Wertes zu einer katastrophalen Fehlerakkumulation für große Argumente (z. B. if xis 1e12und 2*M_PIunterscheidet sich von 2π) durch ε, fmod(x,2*M_PI)unterscheidet sich dann vom korrekten Wert von 2π um bis zu 1e12 * ε / π mal den korrekten Wert von xmod 2π. Das heißt, es ist völlig bedeutungslos.
Eine korrekte Implementierung der Standard-Mathematikbibliothek von C hat einfach eine gigantische, sehr hochpräzise Darstellung von π, die in ihrer Quelle hartcodiert ist, um das Problem der korrekten Argumentreduktion zu lösen (und verwendet einige ausgefallene Tricks, um es nicht ganz so gigantisch zu machen ). So funktionieren die meisten / alle C-Versionen der sin/ cos/ tan-Funktionen. Es ist jedoch bekannt, dass bestimmte Implementierungen (wie glibc) Assembly-Implementierungen auf einigen CPUs (wie x86) verwenden und keine korrekte Argumentreduktion durchführen, was zu völlig unsinnigen Ausgaben führt. (Übrigens läuft der falsche ASM normalerweise ungefähr so schnell wie der richtige C-Code für kleine Argumente.)
double) sollten ausreichen, um den Durchmesser des Sonnensystems mit einem Fehler von weniger als einer Haarbreite zu berechnen.