Créez un programme qui calcule des millions de chiffres de racines parallèles de 2 avec python. La méthode de calcul utilise la méthode d'itération Newton suivante pour les nombres inverses. Itératif: x = x + x * (1-x * x / 2) / 2 La particularité de cette méthode est qu'il n'y a pas de division à plusieurs chiffres. La partie de calcul à n chiffres en python est la suivante. def sqrt2(n): bit, dec = 40, 12 d12 = 100001000010000 x = int( math.sqrt(2)(1 << bit) ) while dec <= n: dec = dec << 1 d2 = 1 << (2bit) x0 = (xx) >> 1 x1 = (d2 - x0) >> 1 x2 = (xx1) >> bit x = (x << bit) + x2 + 1 bit = 2bit d12 = d12d12 x = (x*d12) >> bit dec_o = (n // 100)*100 return x
format (x) est requis pour convertir le résultat du calcul de x = sqrt2 (n) en nombre décimal. Le python entier est publié dans la section du programme python à https://ecc-256.com. Téléchargez sqrt2 et modifiez sqrt2.py et la première importation à importer. Tapez python sqrt2.py à l'invite de commande. Ensuite, entrez le nombre de chiffres de sortie. 1000000 pour 1 million de chiffres
Le temps de calcul de 3 millions, 6 millions, 12 millions pour un ordinateur personnel Windows10 (4Ghz) est le suivant. x=sqrt(n) : 6.7, 19.9, 59.7 (s) format(x) : 136, 545, 2180 (s)
La conversion décimale pour la sortie prend beaucoup plus de temps que le calcul de sqrt (2). sqrt (2) prend deux fois plus de chiffres et trois fois plus longtemps, et la conversion décimale prend quatre fois plus de temps. La multiplication de calcul est la méthode de Karatsuba, et la multiplication de conversion est due à la formule de définition.
Même en python, il peut être accéléré en mettant à l'échelle environ 1000 chiffres décimaux (la valeur est un entier binaire) et en appliquant une conversion résiduelle à grande vitesse (FMT). L'objectif est dans les 3 minutes sur un ordinateur personnel 4Ghz, y compris le calcul de 100 millions de chiffres et la conversion en caractères décimaux (fin février).
Recommended Posts