Donc ce n'est pas nouveau, bah! Au moins je me suis amusé...
Mais c'est quand même rigolo, le gain de temps, au début moi aussi j'étais surpris de voir que c'était plus rapide, mais j'ai pas essayé de comprendre (l'informatique n'est pas mon fort), peut-être que j'ai mal programmé?
Sinon j'ai utilisé les deux algorithme suivant:
Pour la méthode traditionnelle (toujours en Python):
import time
x= int(raw_input('Nombre de depart ' ))
z= int(raw_input('Base visee ' ))
debut = time.time()
b=float(x)
while f<1000000:
***a=0.
***j=0.
***while (int(b/z))!=0:
******a=a+((b/z)-int(b/z))*(10**j)*z
******j=j+1
******b=float(int(b/z))
***a=int(a+((b/z)-int(b/z))*(10**j)*z)
***f=f+1
duree = time.time() - debut
print duree
print a
Et pour ma méthode pseudo-nouvelle:
import time
from math import log10
x= int(raw_input('Nombre de depart ' ))
z= int(raw_input('Base visee ' ))
debut = time.time()
while f<1000000:
***j=0
***for k in range(1, int((log10(x))/(log10(z))+1)):
******j=j+int(x/(z**k))*(1.-(z/10.))*(10.**k)
***y=int(x+j)
***f=f+1
duree = time.time() - debut
print duree
print y
Les deux algorithme font donc un million de fois la même opération. En comparant les temps, je trouve:
4.32 secondes environ pour ma formule.
6.39 secondes environ pour la formule traditionnelle.
Et j'ai voulu tester ta formule, et j'ai eu un meilleur temps d'ailleurs (3.91 secondes environ).
L'algorithme de ta formule:
from math import log10
import time
x= int(raw_input('Nombre de depart ' ))
z= int(raw_input('Base visee ' ))
debut = time.time()
f=0
while f<1000000:
***j=0
***for k in range(0, int((log10(x))/log10(z))+1):
******j=j+((x/(z**k))-(x/(z**(k+1)))*z)*10**k
***f=f+1
duree = time.time() - debut
print duree
print j
C'est surement le fait que j'ai mal programmé qui fait en sorte que nos formules soient plus rapides (dans ce cas il faut sérieusement que j'étudie la programmation).
