2013-06-25 12 views
7

Objective-Cでプログラムで3桁の数の8桁の数値の結果を計算するのに問題があります。Objective-Cで実際に大きな数値を累乗する方法はありますか?

などの数字を使用してください。数字は1862 digits in lengthになります。


私は単純に試してみました:

unsigned long long result = 1; 
for (int i = 0; i < 258; i++) 
    result *= 16468920; 

を...しかしresult出力0


それから私が試した:

long double result = powl(16468920, 258); 

を...しかしresult出力inffinding out about NSDecimal


、私はこれを試してみました:

NSDecimalNumber *number = [[NSDecimalNumber alloc] initWithInt:16468920]; 
NSDecimalNumber *result = [number decimalNumberByRaisingToPower:258]; 

を...しかし、このコードはNSDecimalNumberOverflowExceptionが発生しますので、私が試した、

NSDecimal result; 
NSDecimal number = [[NSDecimalNumber decimalNumberWithString:@"16468920"] decimalValue]; 
NSDecimalPower(&result, &number, 258, NSRoundPlain); 

を...しかしresult出力NaN


私は行くべきであるとして、どの方向に任意のポインタ?

+0

ここに記載されているライブラリの1つ - > http://en.wikipedia.org/wiki/Arbitrary-precision_arithmeticを使用する必要があります。なぜなら、その数字を普通の2進数として保存するのは、神がどれだけ多くビット – borrrden

+3

あなたはあなたが一度それを得ると、あなたはこの数字で何ができるかについて考える必要があります。 (およそ5610ビット、BTW、または701バイト) –

答えて

3

のObjective-CはCのスーパーセットなので、あなたは、このようなBN Cライブラリを使用することができます。

int BN_exp(BIGNUM *r, BIGNUM *a, BIGNUM *p, BN_CTX *ctx); 

BN_exp() raises a to the p-th power and places the result in r ("r=a^p"). This 
function is faster than repeated applications of BN_mul(). 

例えば参照してください、iOS版にOpenSSLを取得する方法についてhere

+1

パーフェクト!これはトリックを行ったようです!私はこの[OpenSSLのBigNumber数学関数のラッパー](https://github.com/davedelong/CHMath)と共に[OpenSSL for iOS](https://github.com/st3fan/ios-openssl)のポートを使用しました結果を 'NSString'として出力してください! – gomollon

0

結果がまだ大きいので、NSDecimalNumberに保存できる可能性があるため、この問題が発生します。

代わりにJKBigIntegerを使用することをお勧めします.LibTomMath CライブラリのObjective-Cラッパーです。そして、本当に使いやすく理解しやすいです。

これが役に立ちます。

関連する問題