将 NSDecimalNumber 计算为负次方
我需要一个与 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
数学上,a^(-b) == 1/(a^b)。因此,如果您只需要提高到负的积分幂,
对于非积分幂,除了(1)自己或通过实现
pow()
算法之外没有其他办法第 3 方库,或 (2) 以浮点执行计算(从而丢失精度)。Mathematically, a^(-b) == 1/(a^b). Therefore, if you just need to raise to a negative integral power,
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).顺便说一句,您对decimalNumberByRaisingToPower的看法似乎是正确的,但是,从Apple文档来看:
这不是无符号的。
Incidentally, you appear to be correct about decimalNumberByRaisingToPower, but, from the Apple docs:
That's not unsigned.
您可以先将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.