J'ai une question à partir de curiosité pure. Comment la multiplication des grands nombres est-elle mise en œuvre dans Matlab? Est-ce que Karatsuba, Toom-3, Fürer ou quelque chose de tout à fait différent? P>
4 Réponses :
Il n'y a pas d'intégré Par défaut, les numéros sont représentés au format Point flottant à double précision IEEE. P> BigInteger code> classe, si c'est ce que vous voulez dire. Vous pouvez utiliser la boîte à outils à point fixe ou importer des classes Java / .Net pertinentes. p>
Qu'en est-il de la boîte à outils symbolique?
Ajout à la réponse, si vous avez besoin de plus de chiffres de précision, vous pouvez essayer d'utiliser ce Fichier FEX P>
Je ne vise pas la précision, mais pour la vitesse du calcul.
Si vous êtes intéressé par l'algorithme pour calculer par exemple regarder cet exemple de code: p> ce qui n'est clairement pas exactement la valeur que vous avez attribuée à 139676498390139139676498390676498390 * 874556655498390676498390 code>, c'est ce qui se passe:
double code> dans IEEEA® Standard 754 LI>
double code> ne peut représenter que avec précision des entiers allant jusqu'à 2 ^ 53-1 code> (cochez la documentation de (~ bitmax code> fonction) 10 ^ 15 code>, pendant que vos numéros sont sur l'ordre de 10 ^ 35 code>). li>
a code> - seulement Les 16 premiers chiffres correspondent à 16 chiffres. P> P>
Si vos chiffres ne sont que gros, mais vous n'avez pas besoin d'un grand nombre de chiffres significatifs. Vous pouvez multiplier un petit nombre avec chaque multiplication, telle que 10 $ ^ -1 $. Gardez une trace du nombre de multiplications $ N $ et obtenez une valeur en termes de 10 ^ {- N} $. Cela peut être un travail temporaire autour. P>
Il y a un WHIP intéressant que j'ai trouvé dans Matlab Central qui peut être associé à votre problème ...
Merci ! cela est certainement interesting. Maintenant, je sais que je peux utiliser la boîte à outils symbolique pour faire ce genre d'opération. Malheureusement, cela ne dit rien sur la manière dont il est implémenté ou quel algorithme est utilisé. Quoi qu'il en soit, merci de commenter!
Si vous ne voulez pas pour votre exactitude, mais pour la vitesse i>, quels sont vos grandes nombres? Peuvent-ils être «approximativement» représentés par des doubles? comme 1e254? Qu'est-ce qui est grand? Avez-vous besoin d'arithmétique de précision arbitraire? Vous dites que vous voulez une grande multiplication de numéros, mais vous dites que vous ne vous souciez pas de précision. Qu'est-ce que ça veut dire?
Il y avait un fil de gros chiffres à Matlab . Comment est-ce différent de ce dont vous avez besoin?
Disons que je ne suis intéressé que par l'algorithme, qui est utilisé quand j'essaie de calculer quelque chose comme ceci: 139676498390139139676498390676498390 * 8745566554983 90676498390