Das Problem ist die Integer-Division im innersten Teil des Ausdrucks, die den Wert abschneidet (Weglassen der Bruchteil). Wie bereits erwähnt, besteht eine Möglichkeit darin, jede Konstante zu einer Gleitkommazahl zu machen, indem man entweder ".0" oder "f" hinzufügt. Alternativ können Sie die Klammern vom innersten Ausdruck vollständig weglassen.Da M_PI
eine Gleitkommazahl ist und die Multiplikation in C linksassoziativ ist (was bedeutet, dass sie von links nach rechts verläuft), wird die erste Multiplikation (2 * M_PI) zu einer Gleitkommazahl hochgestuft, ebenso wie jede nachfolgende Multiplikation. Da cos()
einen Gleitkommawert zurückgibt, wird pNumber
ein Gleitkomma zugewiesen, ohne dass eine Ganzzahldivision ausgeführt wurde, daher kein Genauigkeitsverlust. (Hinweis: Es ist normalerweise nicht ratsam, Assoziativität oder Vorrang des Bedieners zu berücksichtigen, aber in diesem Fall versuche ich nur zu demonstrieren, dass es tatsächlich funktionieren würde.)
So weit der Zahlenbereich, den Sie erwarten sollten , erinnern Sie sich, dass der Kosinus (unmodifiziert) von -1 bis +1 reicht, nicht 0 bis 1, also würden Sie theoretisch -100 bis 100 (in der Theorie) sehen. Um den richtigen Bereich zu erhalten, möchten Sie 1 hinzufügen und dann mit 50 multiplizieren.
Übrigens sind die Kompilierungsfehler, die Sie im ersten Fall erhalten, weil pi
nicht definiert ist. Die Anleitung zur Verwendung von M_PI
ist korrekt - für mathematische Konstanten ist es immer schlauer (und konsistenter), das zu verwenden, was das System bietet. Wenn Sie neugierig sind, sind diese Konstanten auf Leopard in Math.h, Zeilen 528-540, definiert. Sie können die Datei öffnen, indem Sie Datei> Schnell öffnen ... (Cmd-Shift-D) verwenden und "Math.h" eingeben, oder doppelklicken Sie in Ihrem Code auf M_PI
, während Sie Command gedrückt halten.
Zuerst würde ich meine Konstanten floats. – Nosredna