2009-08-04 9 views

Odpowiedz

4

Najbliższa klasa wbudowana w bibliotekach kakao to NSDecimalNumber, która zawiera arytmetykę base-10 (i tak może obsługiwać wyłącznie arytmetyczną liczbę całkowitą) dla wykładnika mantysy x 10 ^, gdzie mantysa jest 38-bitowym zmiennoprzecinkowym i wykładnik jest - 128 do 128. Jeśli obejmuje to zakres, którego potrzebujesz, są metody mnożenia i zasilania. W przeciwnym razie, ponieważ Objective-C jest nadzbiorem C, wystarczająca będzie dowolna implementacja C biginta, którą można znaleźć.

+0

To prawie na pewno nie jest to, czego szuka autor. 'NSDecimalNumber' używa systemu numerowania base-10 do kodowania i manipulowania liczbami, a nie (dużo) bardziej powszechnego base-2. System z numerem 10 jest zwykle używany, gdy zaangażowana jest waluta. W rzeczywistości może być niezgodne z prawem przetwarzanie numerów walutowych w systemach numeracji non-base-10, w zależności od jurysdykcji. – johne

7

Jako zwykła biblioteka C, openssl's BN powinien być w stanie to zrobić.

BN_mod_exp() oblicza a na p-ta moc modulo m (r = a^p% m). Ta funkcja zajmuje mniej czasu i przestrzeni niż BN_exp().

2

Kiedyś, dawno temu, zwinąłem swoje własne opakowanie wokół GMP. Nigdy wcześniej nie używałem żadnych bibliotek zewnętrznych BigNum ObjC, ale miałem te zakładki: RSMath, które używają funkcji OpenSSL bignum i MPInteger, która używa GMP.

10

Mam nadzieję, że nie jest za późno, aby odpowiedzieć na ten wątek.

Możesz wypróbować "LibTomMath", która jest darmowa i darmowa (autor przekazuje ten projekt jako domenę publiczną). Działa po wyjęciu z pudełka bez żadnej konfiguracji, po prostu umieść wszystkie pliki bn _ * .c i tommath * .h w projekcie Xcode i gotowe.

#import "tommath.h" 

mp_int number1, number2, number3; 

mp_init(&number1); 
mp_init(&number2); 
mp_init(&number3); 

mp_read_radix(&number1, "0a120edfff558c98a73015d5d67e8990", 16); 
mp_read_radix(&number2, "12e6f45d698c7b7009a841c1348d6ff4", 16); 

mp_mul(&number1, &number2, &number3); 

char output[1000]; 
mp_toradix(&number3, output, 16); 
NSLog(@"number3:%s", output); 

mp_div(&number3, &number1, &number2, NULL); 
mp_toradix(&number2, output, 16); 
NSLog(@"number2:%s", output); 
+0

TomMath nie ma funkcji pow(), może być kwadratowy lub pierwiastkowy, ale jeśli chcesz podnieść do potęgi n, nie jest to proste. – Muskie

+0

Oczywiście ma on potęgowanie - funkcja nazywa się 'mp_expt_d'. – dchest

7

Można spróbować https://github.com/kirsteins/JKBigInteger Jest ona podobna do BigInteger klasy Java. Posiada metody mod i pow, które można łączyć.

+0

Działa idealnie! Świetna biblioteka trzeciej części! –

+0

Dobra biblioteka, myślę, że to jest najlepsza odpowiedź. –

+0

Wygląda na to, że wewnętrznie używa się "LibTomMath" (patrz odpowiedź wiiat). – LaborEtArs

Powiązane problemy