Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

multiplication de grands nombres

11 réponses
Avatar
Julien Vehent
111secondes pour multiplier 2^21701-1 par lui m=EAme...
Ce qui me fait deux nombres de 4094 chiffres en entr=E9e et un nombre de
8188 chiffres en sortie...

Seulement voila, le script que j'ai =E9cris (en perl, baaaaa) pour
bidouiller de mani=E8re p=E9dagogique sur les multiplications de grands
nombres me bouffe + de 500 Mo de ram pour faire l'op=E9ration.

Quand bien m=EAme j'aurais un peu fait ca a l'arrache (n'en doutez pas),
ca me parait tout de m=EAme beaucoup.
Du coup, les questions que je me/vous pose sont les suivantes :

1. Ca devrait se limiter =E0 quel ordre de grandeur normalement ?
2. Est-il possible de construire un algo qui travailler dans un espace
m=E9moire de taille finie ?


Merci,

Julien

1 réponse

1 2
Avatar
remy
Julien Vehent a écrit :
On 13 oct, 09:17, remy ;> wrote:
Julien Vehent a écrit :

On 10 oct, 13:27, Julien Vehent wrote:
Me rendant bien compte que ma précédente version était pourrie, j'ai
repris ca aujourd'hui.... et ca va beaucoup mieux !
Multiplication de deux nombres de 1774 chiffres (du random) en 2.8
secondes et moi de 4Mo de mémoire.


bon, c'est pas encore ca... je fais en 27 secondes ce que bc fait en
0.034s......
meme si on compare du perl a de l'assembleur, j'imagine que les algos
implemetes par bc doivent etre beaucoup plus performant et tirer
partie des capacites 32bits des machines.. (genre karatsuba)


c'est dans les vieux pots que l'on fait la bonne confiture

http://www.recreomath.qc.ca/dict_russe_multiplication.htm

en gros fais un décalage à gauche de la représentation en base 2
ce qui revient à multiplier par deux

a+ remy




et quand A ou B est sup. a 2^32, tu fais comment pour les faire
rentrer dans la mémoire ?




en c à partir de rien j'en sais rien, une liste chaînée ou un malloc
par exemple
je ne suis pas très au point avec le C il vaut mieux écouter les autres

sinon

http://gmplib.org/ mais tout est déjà fait dedans

remy
1 2