我需要等效于C的pow()函数,它可以与NSDecimalNumbers一起使用。使用pow,您可以使用负数,例如pow(1514,-1234)
,使用NSDecimal的decimalNumberByRaisingToPower:方法,您被迫使用似乎需要正值的NSUInteger。
我希望能够做到这样的事情:
[decimalNumber decimalNumberByRaisingToPower:-217.089218];
或
[decimalNumber decimalNumberByMultiplyingByPowerOf10:-217];
不会因溢出或下溢异常而崩溃。
答案 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。