Pi in C verwenden

1 Antwort

1.) Kann sein, dass blos die Codevervollständigung die Konstante nicht anbietet. Benutze die Konstante mal und kompiliere. Findet er sie nicht und es kommt ein Fehler hast du tatsächlich was falsch eingebunden

2.) Pi kann man nicht exakt definieren, das verbietet ja schon die Natur der Transzendenten Zahl.

Wie genau Pi definiert ist hängt vom Datentyp ab. Denn der legt fest wie viel Information von der Zahl gespeichert werden kann. double ist der Zahlentyp der die höchste Präzision der Nachkommastellen erlaubt (und dabei Teil von Standard-C ist). Gibst du Kommazahlen in C an werden die automatisch als double behandelt. double hat eine maximale Präzision von knapp unter 16 Nachkommastellen. Die kleinste positive Zahl (abgesehn von 0) die ein double speichern kann ist 0.00000000000000002. Genauer gehts nicht. Definiert ist M_PI aber mit 20 Nachkommastellen. D.h. Pi ist in Wirklichkeit noch ungenauer als du glaubst.

Mit den normalen Zahltypen in C kannst du nicht genauer kommen. Wenn du dir aber einen eigenen Datentyp implementierst, der mehr Information halten kann und dann Funktionen schreibst damit man mit den "Zahlen" des Typs rechnen kann, kannst du deine Berechnungen noch genauer machen.

In der Regel ist die double-Genauigkeit von Pi aber ausreichend. Noch genauer würdest du es höchstens brauchen wenn du vorhast ein Programm zu schreiben mit dem man z.B. das Mandelbrot-Fraktal beliebig tief berechnen. Denn hier ist die Präzision der Kommazahlen ausschlaggebend wie tief du rein kommst. In solchen, speziellen Fällen macht es durchaus Sinn eine genauere Definition von Zahlen zu haben (Pi spielt in dem Beispiel keine direkte Rolle).

Übrigens gibt es für solche Zwecke Datentypen mit denen man theoretisch beliebig genau rechnen kann. In Java heißt der Typ "BigDecimal", in C# "" und in C gibt es beispielsweise die Bibliothek gmplib: https://gmplib.org/ Wenn du mit der rechnen würdest kannst du dir dein eigenes Pi beliebig genau definieren.

Noch was: du kannst natürlich Pi selber definieren. Aber andere Programme die M_PI nutzen kannst du damit nicht präziser machen! Wenn du die Konstante neu definieren würdest müsstest du wie gesagt auf einen anderen Typ gehen und dann bekommen die Programme einen Typenkonflikt. Zumal es überhaupt keine gute Idee Konstanten wie Pi neu zu definieren