2013-03-05 12 views
9

Includendo alcuni calcoli nel mio codice, ho inciampato sulla costante "PI". Almeno nella mia versione Xcode 4.6 potrei usare uno dei due. Ma qual è la differenza tra pi e M_PI? La documentazione è un po 'stretta su questo argomento.Qual è la differenza tra "pi" e "M_PI" nell'oggetto

+1

'pi' non è una costante standard nelle intestazioni Cocoa che ho incluso, né è' PI'. 'M_PI' è la definizione standard di math.h e dovrebbe essere adatta per la maggior parte degli scopi. –

+2

@BenZotto: 'M_PI' è un posix-ism, non parte dello standard C. –

+0

@StephenCanon: giusto. Intendevo "standard" come in "quello che tutti usano". :) –

risposta

21

pi è definito nelle intestazioni "CarbonCore.framework", come

extern const double_t pi __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_0, __MAC_10_8, __IPHONE_NA, __IPHONE_NA); 

ma contrassegnati come "deprecato". Presumo che si tratti di un relitto di vecchie strutture in carbonio.

M_PI è definito come macro

#define M_PI 3.14159265358979323846264338327950288 

in math.h e parte dello standard POSIX.

I valori sono identici, ma è necessario utilizzare M_PI per motivi di trasferibilità.

(E per Swift, vedere How to get mathemical PI constant in Swift.)

+0

Grazie per la risposta e WOW! È bello sapere di non usare 'pi' (ho sempre fatto così lontano). Posso includere direttamente 'M_PI' nel mio codice o devo' #importare ... 'anche una classe speciale. – JFS

+1

Se si importano già le intestazioni Foundation o CoreFoundation, è sufficiente utilizzarlo, poiché queste includono ''. Altrimenti devi aggiungere "#include " al tuo codice. –

+0

Grazie e buona fortuna! – JFS

0

M_PI è abbastanza vicino per approssimare la circonferenza della galassia (e probabilmente l'intero Universo) a poche miglia, in modo da non perdere il sonno esso.