Tôi đang gặp một số sự cố khi tính toán kết quả của một số có 8 chữ số với sức mạnh của một số có 3 chữ số lập trình trong Mục tiêu-C.Làm thế nào để tăng số lượng thực sự lớn trong Objective-C?
Lấy các số này, ví dụ: 16468920^258
, sẽ dẫn đến một số là 1862 digits in length.
Tôi ngây thơ thử:
unsigned long long result = 1;
for (int i = 0; i < 258; i++)
result *= 16468920;
... nhưng result
đầu ra 0
.
Sau đó, tôi đã cố gắng:
long double result = powl(16468920, 258);
... nhưng result
đầu ra inf
.
Sau finding out about NSDecimal, tôi đã cố gắng này:
NSDecimal result;
NSDecimal number = [[NSDecimalNumber decimalNumberWithString:@"16468920"] decimalValue];
NSDecimalPower(&result, &number, 258, NSRoundPlain);
... nhưng result
đầu ra NaN
, vì vậy tôi cố gắng:
NSDecimalNumber *number = [[NSDecimalNumber alloc] initWithInt:16468920];
NSDecimalNumber *result = [number decimalNumberByRaisingToPower:258];
... nhưng mã này đặt ra một NSDecimalNumberOverflowException
.
Bất kỳ con trỏ nào tôi sẽ đi theo hướng nào?
Bạn sẽ phải sử dụng một trong các thư viện được đề cập ở đây -> http://en.wikipedia.org/wiki/Arbitrary-precision_arithmetic vì lưu trữ số đó dưới dạng số nhị phân đơn giản có nghĩa là Chúa chỉ biết số lượng bits – borrrden
Bạn cần phải suy nghĩ về những gì bạn có thể có thể làm với số này một khi bạn nhận được nó. (Khoảng 5610 bit, BTW hoặc 701 byte.) –