开发者

Raise an NSDecimalNumber to a negative power

I need an equivalent to C's pow() function that will work with NSDecimalNumbers. With pow you can use negative numbers e.g. pow(1514,-1234), with NSDecimal's decimalNumberByRaisingToPower: method, you are forced to use an NSUInteger which seems to require a positive value.

I'd like to be able to do something like this:

[decimalNu开发者_如何学运维mber decimalNumberByRaisingToPower:-217.089218];

or

[decimalNumber decimalNumberByMultiplyingByPowerOf10:-217];

without crashing from overflow or underflow exceptions.


Mathematically, a^(-b) == 1/(a^b). Therefore, if you just need to raise to a negative integral power,

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

For non-integral powers, there's no way except (1) implement the pow() algorithm yourself or by 3rd party libraries, or (2) performing the calculation in floating point (thus losing precisions).


Incidentally, you appear to be correct about decimalNumberByRaisingToPower, but, from the Apple docs:

(NSDecimalNumber *)decimalNumberByMultiplyingByPowerOf10:(short)power

That's not unsigned.


You can first convert decimalNumber to its doubleValue and then just call the pow function of C++. I haven't tried it but I think it should work. Refer: Calling Objective-C method from C++ method? for mixing c++ and objective c.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜