我在Objective-C中以編程方式計算一個8位數字的結果與3位數字的結果有些麻煩。如何在Objective-C中取冪非常大的數字?
取這些數字,例如:16468920^258
,這應導致一個數字是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
輸出inf
。
finding out about NSDecimal之後,我嘗試這樣做:
NSDecimal result;
NSDecimal number = [[NSDecimalNumber decimalNumberWithString:@"16468920"] decimalValue];
NSDecimalPower(&result, &number, 258, NSRoundPlain);
...但result
輸出NaN
,所以我嘗試:
NSDecimalNumber *number = [[NSDecimalNumber alloc] initWithInt:16468920];
NSDecimalNumber *result = [number decimalNumberByRaisingToPower:258];
...但是這個代碼引發NSDecimalNumberOverflowException
。
任何指針,以我應該走哪個方向?
您將不得不使用這裏提到的一個庫 - > http://en.wikipedia.org/wiki/Arbitrary-precision_arithmetic,因爲將該數字存儲爲一個普通的二進制數字意味着上帝只知道有多少位 – borrrden
你需要考慮一旦你得到它,你可以用這個號碼做些什麼。 (粗略5610位,BTW或701字節)。 –