2010-08-29 49 views
3

我需要一個等同於C的pow()函數,它可以與NSDecimalNumbers一起使用。使用pow可以使用負數pow(1514,-1234),使用NSDecimal的decimalNumberByRaisingToPower:方法,您被迫使用似乎需要正值的NSUInteger。提高NSDecimalNumber爲負值

我希望能夠做這樣的事情:

[decimalNumber decimalNumberByRaisingToPower:-217.089218]; 

[decimalNumber decimalNumberByMultiplyingByPowerOf10:-217]; 

而不溢或下溢異常崩潰。

回答

4

在數學上,a ^( - b)== 1 /(a^b)。因此,如果你只需要提高到一個負整體功率,

decimalNumber = [decimalNumber decimalNumberByRaisingToPower:1234]; 
decimalNumber = [[NSDecimalNumber one] decimalNumberByDividingBy:decimalNumber]; 

對於非整數次冪,有沒有辦法,除非(1)自己實現pow()算法或通過第三方庫,或(2 )以浮點執行計算(從而失去精度)。

+0

這是一個完整的權力,在這種情況下,你的答案是完美的 – 2010-08-30 19:41:06

+0

這似乎並不適合我。我錯過了什麼? 9 ^( - 2)= 3; 1 /(9^2)= 1/27; – Bryan 2012-12-02 03:35:40

1

順便說一句,你似乎是約decimalNumberByRaisingToPower正確的,但是,從蘋果的文檔:

(NSDecimalNumber *)decimalNumberByMultiplyingByPowerOf10:(短)功率

這不是無符號。