我在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字节)。 –