我在 Objective-C 中以编程方式计算 8 位数字的结果到 3 位数字的幂时遇到了一些麻烦。
以这些数字为例:16468920^258
,这应该产生一个长度为 1862 位的数字。
我天真地尝试过:
unsigned long long result = 1;
for (int i = 0; i < 258; i++)
result *= 16468920;
…但是result
输出0
。
然后我尝试了:
long double result = powl(16468920, 258);
…但是result
输出inf
。
在了解了 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
.
关于我应该往哪个方向前进的任何指示?