Sto riscontrando qualche problema nel calcolare il risultato di un numero a 8 cifre sulla potenza di un numero a 3 cifre programmaticamente in Objective-C.Come esponenziare numeri veramente grandi in Objective-C?
Prendere questi numeri, ad esempio: 16468920^258
, che dovrebbe risultare in un numero che è 1862 digits in length.
ingenuamente cercato:
unsigned long long result = 1;
for (int i = 0; i < 258; i++)
result *= 16468920;
... ma result
uscite 0
.
Poi provato:
long double result = powl(16468920, 258);
... ma result
uscite inf
.
Dopo finding out about NSDecimal, ho provato questo:
NSDecimal result;
NSDecimal number = [[NSDecimalNumber decimalNumberWithString:@"16468920"] decimalValue];
NSDecimalPower(&result, &number, 258, NSRoundPlain);
... ma result
uscite NaN
, quindi provato:
NSDecimalNumber *number = [[NSDecimalNumber alloc] initWithInt:16468920];
NSDecimalNumber *result = [number decimalNumberByRaisingToPower:258];
... ma questo codice sollevano NSDecimalNumberOverflowException
.
Tutti gli indicatori su quale direzione dovrei andare?
Dovrai utilizzare una delle librerie menzionate qui -> http://en.wikipedia.org/wiki/Arbitrary-precision_arithmetic perché per memorizzare quel numero come un semplice numero binario vorrebbe dire che Dio solo sa quanti bit – borrrden
Devi pensare a cosa puoi fare con questo numero una volta ottenuto. (Circa 5610 bit, BTW o 701 byte) –