Tenir compte de l'équation ci-dessous:Comment trouver la valeur de l'exposant dans Ruby?
2 ** n = A
Supposons A = 64.
Quelle est la manière la plus simple de trouver la valeur de n?
J'utilise actuellement selon deux approches
A= 64; n = 1; n+=1 while (A >> n) > 0; n-1
A= 64; n = 0; n+=1 until (A == (2 ** n));n
Y at-il une meilleure approche?
Autre façon d'exprimer le même problème:
2 = racine nième A Si je connais la valeur de A, comment puis-je déterminer la valeur de n?
J'ai fait un benchmark simple sur trois approches. Comme prévu, l'approche logarithmique est la plus rapide. système utilisateur au total réel bit sage décalage à droite 0,235000 0,000000 0,235000 (0,235000) séquentielle compare 1,484000 0,000000 1,484000 (1,500000) logarithmique 0,141000 0,000000 0,141000 (0,140000) –
J'ai changé la logique de la méthode de changement de décalage de bits (ie ma première approche) et a obtenu la meilleure performance par rapport aux trois autres méthodes. A = 64; n = 0; n + = 1 jusqu'à ((A >> = 1) == 0); n; Donc, je vais avec l'approche de décalage de bits. –