将 NSDecimalNumber 计算为负次方

发布于 2024-09-16 14:14:11 字数 400 浏览 5 评论 0原文

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

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

[decimalNumber decimalNumberByRaisingToPower:-217.089218];

或者

[decimalNumber decimalNumberByMultiplyingByPowerOf10:-217];

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

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:

[decimalNumber decimalNumberByRaisingToPower:-217.089218];

or

[decimalNumber decimalNumberByMultiplyingByPowerOf10:-217];

without crashing from overflow or underflow exceptions.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

二货你真萌 2024-09-23 14:14:11

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

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

对于非积分幂,除了(1)自己或通过实现pow()算法之外没有其他办法第 3 方库,或 (2) 以浮点执行计算(从而丢失精度)。

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).

So要识趣 2024-09-23 14:14:11

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

(NSDecimalNumber *)decimalNumberByMultiplyingByPowerOf10:(短)幂

这不是无符号的。

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

(NSDecimalNumber *)decimalNumberByMultiplyingByPowerOf10:(short)power

That's not unsigned.

下壹個目標 2024-09-23 14:14:11

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

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文