2010-08-29 52 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:(短)功率

这不是无符号。