在Objective-C中以编程方式计算一个8位数的结果到3位数的幂,我遇到了一些麻烦.
取这些数字,例如:16468920^258
,这应该产生一个长度为1862位的数字.
我天真地尝试过:
unsigned long long result = 1;
for (int i = 0; i < 258; i++)
result *= 16468920;
Run Code Online (Sandbox Code Playgroud)
......但是result
产出0
.
然后我尝试了:
long double result = powl(16468920, 258);
Run Code Online (Sandbox Code Playgroud)
......但是result
产出inf
.
在找到NSDecimal之后,我尝试了这个:
NSDecimal result;
NSDecimal number = [[NSDecimalNumber decimalNumberWithString:@"16468920"] decimalValue];
NSDecimalPower(&result, &number, 258, NSRoundPlain);
Run Code Online (Sandbox Code Playgroud)
......但result
输出NaN
,所以我试过:
NSDecimalNumber *number = [[NSDecimalNumber alloc] initWithInt:16468920];
NSDecimalNumber *result = [number decimalNumberByRaisingToPower:258];
Run Code Online (Sandbox Code Playgroud)
...但是这段代码提出了一个问题NSDecimalNumberOverflowException
.
关于我应该去哪个方向的任何指示?