将NSDecimalNumber提升为负幂

时间:2010-08-29 18:35:27

标签: iphone nsdecimalnumber

我需要等效于C的pow()函数,它可以与NSDecimalNumbers一起使用。使用pow,您可以使用负数,例如pow(1514,-1234),使用NSDecimal的decimalNumberByRaisingToPower:方法,您被迫使用似乎需要正值的NSUInteger。

我希望能够做到这样的事情:

[decimalNumber decimalNumberByRaisingToPower:-217.089218];

[decimalNumber decimalNumberByMultiplyingByPowerOf10:-217];

不会因溢出或下溢异常而崩溃。

3 个答案:

答案 0 :(得分:4)

数学上,a ^( - b)== 1 /(a ^ b)。因此,如果您只需要提高负值积分电源,

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

对于非整数幂,除了(1)自己或第三方库实现pow()算法,或(2)以浮点执行计算(从而失去精度)之外,没有办法。

答案 1 :(得分:1)

顺便提一下,您对decimalNumberByRaisingToPower的看法是正确的,但是,来自Apple文档:

  

(NSDecimalNumber *)decimalNumberByMultiplyingByPowerOf10 :(短)力量

那不是未签名的。

答案 2 :(得分:0)

您可以先将decimalNumber转换为doubleValue,然后调用C ++的pow函数。我没有尝试过,但我认为它应该有效。 请参阅:Calling Objective-C method from C++ method?了解混合c ++和目标c。