Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Problem mit M_pi

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
21.11.2003, 09:01 Uhr
~Chris
Gast


Hallo.

Ich habe einen Source und hab mit #include <math.h> die Mathebibliothek eingebunden. Nun müsste ich, nach meinen Informationen M_PI als PI verwenden können. Dem ist aber nicht so, undeclared identifier.....

WARUM? Was mach ich nun wieder falsch?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
21.11.2003, 10:23 Uhr
~unbekannter
Gast


im Notfall kannst Du pi berechen mit 4*atan(1.) aber in c++ denke ich mal das ist im verzeichnis <cmath> vorhanden ...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
21.11.2003, 10:27 Uhr
0xdeadbeef
Gott
(Operator)


Bei mir gehts. Zeig mal den Code her.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
21.11.2003, 10:34 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


@beefy
Er benutzt bestimmt windows. Bei mir kennt der das auch nicht aber ist nicht wirklich ein problem
einfach ein

C++:
#ifndef M_PI
#define M_PI 3.1415926535897932
#endif


verwenden
--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 21.11.2003 um 10:34 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
21.11.2003, 10:51 Uhr
~Chris
Gast


Danke für eure Hilfe. Es ist tatsächlich so daß ich Windows verwende und das Ganze da irgendwie nicht funzt...
Habs mit dem Tip von Wildalf hingebracht.

VIELEN DANK!!!!!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
21.11.2003, 23:06 Uhr
Hans
Library Walker
(Operator)


Hi,

ich schlage eine Kombination aus beiden vor:

C++:
#ifndef M_PI
const double M_PI = 4*atan(1.);
#endif


Das hat den Vorteil, das auf der einen Seite ein Compiler der M_PI kennt, das benutzt, was in seinen Bibliotheken dafür steht. Wenn der Compiler es nicht kennt, hast Du auf der anderen Seite eine Konstante, die pi mit der höchsten Genauigkeit wiedergibt, mit der auch der Compiler (bzw. die Laufzeitbibliotheken) arbeiten können.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
21.11.2003, 23:10 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


@Hans
das hat meiner meinung aber den Nachteil das der das zur laufzeit erst berechnet. Dann würde ich eher dazu neigen Pi auf noch mehr stellen nach dem komma anzugeben
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
22.11.2003, 16:11 Uhr
Hans
Library Walker
(Operator)



Zitat:
Windalf postete
@Hans
das hat meiner meinung aber den Nachteil das der das zur laufzeit erst berechnet.
Hi Windalf,

ob das wirklich ein Nachteil ist, kann ich nicht beurteilen. Ich vermute mal, das es dann vom konkreten Problem abhängt.

Zitat:
Dann würde ich eher dazu neigen Pi auf noch mehr stellen nach dem komma anzugeben

Kann man auch machen. Aber letzten Endes halte ich es mehr oder weniger für unwichtig, wo die Konstanten definiert werden. Sei es nun im eigenen Quelltext, so wie Du es vorschlägst, oder irgendwo in der Laufzeit-Bib, worauf mein Vorschlag hinausläuft. Die Variante mit der Berechnung hab ich übrigens von einem EDV-Professor. Und der hat sie auch damit begründet, das man so die maximal mögliche Stellenzahl für Pi erhält, mit der das System arbeiten kann.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.

Dieser Post wurde am 22.11.2003 um 16:13 Uhr von Hans editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
22.11.2003, 16:20 Uhr
0xdeadbeef
Gott
(Operator)



C++:
const double M_PI = 4*atan(1.);


ist kein legales C. const bedeutet, dass der Wert zur Compilezeit feststehen muss, was in diesem Fall nicht gegeben ist. atan kann, je nachdem, gegen welche Bibliothek man linkt, alles mögliche sein, das weiß der Compiler nicht. Deswegen kann er das auch nicht rausoptimieren, und das verschwendet Rechenzeit. Außerdem bist du damit aufgrund von Rundungsfehlern nicht so exakt, wie du es mit einer entsprechend langen Zahlenkonstante wärst.

Nachtrag: Bei mir steht in der math.h:

C++:
define M_PI            3.14159265358979323846  /* pi */
define M_PIl           3.1415926535897932384626433832795029L  /* pi */


für float- und double-Konstanten.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 22.11.2003 um 16:21 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
22.11.2003, 16:21 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


@beefy
schön das du mal für mich ne lanze brichst
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: