2012-10-16 43 views
0

之間的差異我有一個必須是相同的兩個值之間的這種差異...iOS的 - 結果

#define degreesToRadian(x) (M_PI * x/180.0f) 

... 
CGFloat angle = -3.0f; 
CGFloat beta = degreesToRadian(90.0f - fabsf(angle)); 

CGFloat delta = (90.0f - fabsf(angle)) * M_PI /180.0f; 

在這一點上,我得到的β= 282.72和三角洲= 1.51?

兩個值必須相同!

這是爲什麼?

回答

1

您的宏被打破 - 變化:

#define degreesToRadian(x) (M_PI * x/180.0f) 

到:

#define degreesToRadian(x) (M_PI * (x)/180.0f) 

NB:這又是爲什麼你不應該使用預處理對這種事情的另一個例子。 C和Objective C已經有20年的內聯功能了 - 你應該利用它們。

+0

你能解釋爲什麼會發生這種事情嗎? – SpaceDog

+1

表達式將**不**,我重複**不**在被插入到宏之前被消除。這實際上是一個複製和粘貼工作。所以你會把你的操作順序排除在外。你想'M_PI' *(90.0f - fabsf(角度))/ 180.f',但你得到'M_PI' * 90.0f - fabsf(角度)/ 180.f'。我希望我不需要解釋這兩者之間的區別... – borrrden

+0

好的。謝謝.....不是每個人都有最先進的人的知識水平。我知道很多東西,但我總是在學習,我總是喜歡學習。我問過因爲我總是想知道背後的原因,所以我可以改進。 – SpaceDog