2
Voici un morceau de code qui prend le plus de temps dans mon programme, selon les statistiques timeit. C'est une fonction sale de convertir les flottants dans [-1.0, 1.0] intervalle en entier non signé [0, 2 ** 32]. Comment puis-je accélérer floatToInt
?Conversion de float en int plus rapide en Python
piece = []
rng = range(32)
for i in rng:
piece.append(1.0/2**i)
def floatToInt(x):
n = x + 1.0
res = 0
for i in rng:
if n >= piece[i]:
res += 2**(31-i)
n -= piece[i]
return res
Non, j'ai compliqué les choses. Cela a fonctionné 10 fois plus vite. –
2 ** 31 évalue à 2147483648 à chaque fois. Puisque vous êtes concentré sur la vitesse ici, remplacer 2 ** 31 par cette constante est un calcul de moins que vous aurez besoin de faire dans votre segment de code critique. – PaulMcG
J'ai vérifié avec timeit et 2 ** 31 est seulement plus lent quand il n'y a pas de "x" dans l'équation ?? – pixelbeat