3

NSDecimalNumbers で動作する C の pow() 関数に相当するものが必要です。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()アルゴリズムを自分で実装するか、サードパーティのライブラリで実装するか、(2) 浮動小数点で計算を実行する (したがって精度が失われる) 以外に方法はありません。

于 2010-08-29T19:24:41.983 に答える
1

ちなみに、decimalNumberByRaisingToPower については正しいようですが、Apple ドキュメントから:

(NSDecimalNumber *)decimalNumberByMultiplyingByPowerOf10:(短い)べき乗

それは無署名ではありません。

于 2011-01-19T04:19:26.127 に答える
0

最初に decimalNumber をその doubleValue に変換してから、C++ の pow 関数を呼び出すだけです。試したことはありませんが、うまくいくはずだと思います。参照: C++ メソッドから Objective-C メソッドを呼び出す? c++ と目的の c を混在させるため。

于 2010-08-29T18:55:35.703 に答える