2009-08-04 2 views

Antwort

4

Die nächstgelegene eingebaute Klasse in den Cocoa-Bibliotheken ist NSDecimalNumber, die arithmetische Basis-10 (und damit arithmetische Ganzzahlverarbeitung) für den Bereich Mantisse x 10^Exponent, wobei Mantisse ein 38-Bit-Gleitkomma und Exponent ist - 128 bis 128. Wenn das den Bereich deckt, den Sie benötigen, gibt es Multiplikations- und Power-Methoden. Andernfalls, da Objective-C eine Obermenge von C ist, wird jede C-Implementierung von bigint, die Sie finden können, ausreichen.

+0

Dies ist fast sicher nicht das, wonach der Autor sucht. 'NSDecimalNumber' verwendet ein Basis-10-Nummerierungssystem zum Codieren und Manipulieren von Zahlen, nicht die (viel) häufigere Basis-2. Ein Basis-10-Nummernsystem wird typischerweise verwendet, wenn Währung involviert ist. In der Tat kann es gesetzwidrig sein, währungsbezogene Nummern in einem Nicht-Basis-10-Nummerierungssystem zu verarbeiten. – johne

7

Als einfache C-Bibliothek sollte openssls BN es tun können.

BN_mod_exp() berechnet a zum p-ten Potenzmodulo m (r = a^p% m). Diese Funktion benötigt weniger Zeit und Speicherplatz als BN_exp().

2

Ich habe vor langer Zeit meinen eigenen Wrapper rund um GMP gerollt. Ich habe noch nie zuvor BigNum ObjC-Librariers von Drittanbietern verwendet, aber ich hatte folgende Lesezeichen: RSMath, die die OpenSSL bignum-Funktionen verwendet, und MPInteger, die GMP verwendet.

10

Ich hoffe, es ist nicht zu spät diesen Thread zu beantworten.

Sie können "LibTomMath" versuchen, die opensource und frei ist (der Autor verschenkt dieses Projekt als public domain). Es funktioniert ohne jede Konfiguration, einfach alle bn _ *. C und tommath * .h zu Ihrem Xcode-Projekt und Sie sind bereit zu gehen.

#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 scheint keine pow() -Funktion zu haben, es kann Quadrat- oder Quadratwurzel sein, aber wenn Sie auf die Macht von n erhöhen möchten, ist es nicht einfach. – Muskie

+0

Natürlich hat es Potenzierung - die Funktion heißt 'mp_expt_d'. – dchest

7

Sie können https://github.com/kirsteins/JKBigInteger versuchen Es ist ähnlich wie Java BigInteger Klasse. Es hat Mod und Pow-Methoden, die Sie kombinieren können.

+0

Funktioniert perfekt! Große Third-Part-Bibliothek! –

+0

gute Bibliothek, ich denke, das ist die beste Antwort –

+0

Es scheint, dass intern "LibTomMath" verwendet wird (siehe iwats Antwort). – LaborEtArs