3

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

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

[decimalNumber decimalNumberByRaisingToPower:-217.089218];

或者

[decimalNumber decimalNumberByMultiplyingByPowerOf10:-217];

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

4

3 回答 3

4

在数学上,a^(-b) == 1/(a^b)。因此,如果你只需要提高到负积分幂,

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

对于非整数幂,除了 (1)pow()自己或通过 3rd 方库实现算法,或 (2) 以浮点执行计算(从而失去精度)之外,别无他法。

于 2010-08-29T19:24:41.983 回答
1

顺便说一句,您似乎对 decimalNumberByRaisingToPower 是正确的,但是,来自 Apple 文档:

(NSDecimalNumber *)decimalNumberByMultiplyingByPowerOf10:(short)power

那不是未签名的。

于 2011-01-19T04:19:26.127 回答
0

您可以先将 decimalNumber 转换为其 doubleValue,然后调用 C++ 的 pow 函数。我没有尝试过,但我认为它应该可以工作。参考:从 C++ 方法调用 Objective-C 方法?用于混合 c++ 和目标 c。

于 2010-08-29T18:55:35.703 回答