PDA

View Full Version : [C++] Funzione modulo per numeri molto grandi


Venom9
20-10-2012, 17:46
Salve a tutti,
sto lavorando ad un progetto abbastanza complesso in cui ho bisogno di trasformare dei numeri decimali molto grandi in numeri in base 3.
Per fare ciò ho scritto una funzione che utilizza la funzione modulo.
Il problema è che se uso % oppure fmod, il programma non funziona per numeri più grandi di E24.
Voglio dire, il programma compila, ma se ad esempio faccio fmod(3e25,3), dovrebbe darmi resto 0, invece mi dà resto 1.

Ho provato allora a scrivere una funzione modulo utilizzando la definizione:
resto = dividendo - parte_intera(quoziente)*divisore;

Il problema però è ottenere la parte intera di un numero molto grande. Se faccio floor() oppure il casting con (long long int) non funziona con numeri maggiori di E24 (compila ma dà valori sbagliati).

Cosa posso fare?

Grazie a tutti.

nb: ho bisogno di lavorare con numeri che possono arrivare anche a E50

chetasman
20-10-2012, 18:37
Forse potrebb esserti utile questa (http://gmplib.org/)

Venom9
20-10-2012, 20:00
Potresti darmi una mano ad installarlo?
Ho seguito le indicazioni:

./configure
make
make check

e sembra tutto a posto.
Ora ho provato a compilare un programma d'esempio che ho trovato in wikipedia http://en.wikipedia.org/wiki/GNU_Multiple_Precision_Arithmetic_Library ma mi dice

fatal error: gmp.h: File o directory non esistente
compilation terminated.


Non ho mai usato librerie esterne a c++, quindi non so bene cosa devo fare.
Grazie

Venom9
20-10-2012, 22:34
Sono riuscito ad installarlo correttamente e compila.
Ora però ho un nuovo problema, se aggiungo ad esempio la libreria iostream allo stesso codice, non mi compila più e mi dà il seguente errore:

gcc -o sim sim.c -lgmp
sim.c:75:21: fatal error: iostream: File o directory non esistente
compilation terminated.

Venom9
20-10-2012, 22:48
Sono un cretino, dovevo usare g++ :D