2013-03-05 38 views
9

Bao gồm một số phép tính trong mã của tôi, tôi đã tình cờ gặp "PI" không đổi. Ít nhất là trong phiên bản Xcode của tôi 4.6, tôi có thể sử dụng một trong hai. Nhưng sự khác biệt giữa piM_PI là gì? Tài liệu hướng dẫn rất ít về chủ đề đó.Sự khác biệt giữa "pi" và "M_PI" trong objc

+1

'pi' không phải là hằng số chuẩn trong tiêu đề Cocoa mà tôi đã đưa vào, cũng không phải là' PI'. 'M_PI' là định nghĩa chuẩn từ math.h, và sẽ ổn cho hầu hết các mục đích. –

+2

@BenZotto: 'M_PI' là một posix-ism, không phải là một phần của tiêu chuẩn C. –

+0

@StephenCanon: Đúng vậy. Tôi có nghĩa là "tiêu chuẩn" như trong "tất cả mọi người sử dụng". :) –

Trả lời

21

pi được định nghĩa trong các tiêu đề "CarbonCore.framework" như

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

nhưng đánh dấu là "phản đối". Tôi cho rằng đó là một sự phản đối từ các khung Carbon cũ hơn.

M_PI được định nghĩa là một macro

#define M_PI 3.14159265358979323846264338327950288 

trong math.h và một phần của tiêu chuẩn POSIX.

Các giá trị giống nhau, nhưng bạn nên sử dụng M_PI vì lý do di chuyển.

(Và đối với Swift, thấy How to get mathemical PI constant in Swift.)

+0

Cảm ơn câu trả lời và WOW! Đó là điều tốt để biết không sử dụng 'pi' (tôi luôn làm như vậy). Tôi có thể thẳng bao gồm 'M_PI' trong mã của tôi hay tôi cần phải' #import ... 'một lớp đặc biệt nữa. – JFS

+1

Nếu bạn đã nhập tiêu đề Foundation hoặc CoreFoundation thì bạn có thể sử dụng nó, vì chúng bao gồm ''. Nếu không, bạn phải thêm '#include ' vào mã của mình. –

+0

Xin cảm ơn và chúc bạn may mắn! – JFS

0

M_PI là đủ gần để xấp xỉ chu vi của thiên hà (và có lẽ là cả vũ trụ) trong vòng vài dặm, vì vậy tôi sẽ không bị mất ngủ hơn nó.

Các vấn đề liên quan