+
L'implémentation Java de pow est mis en œuvre pour le double, plutôt que de long, et utilise probablement logarithmes. Cela rend difficile la comparaison directe - pow devrait avoir un facteur temps plus ou moins constant, mais la double précision arithmétique peut être coûteux. Sinon, il semble assez simple. Si vous êtes à la recherche pour la vitesse, avez-vous essayé en utilisant décalages de bits plutôt que les divisions? Il est possible que le compilateur optimise une division par 2 à un décalage de bits, mettez peut-être pas. Bien que, le décalage de bits est probablement un peu moins lisible que le fossé - et il est possible d'être trop intelligent. répondu le 15 mai '12 à 03:35 Pardon! pour le num problème était pour mon propre but de compter le nombre de récurrences. Je l'ai enlevé maintenant. dharam 15 mai '12 à 3:40 @ La suggestion de Donals était bonne. Je ne vérifie pas le débordement - je suppose une exception sera levée alors. Je ne cherche pas à compiler et exécuter ce en utilisant Java. S'il vous plaît faire essayer vous-même. Notez que le code rapide commence rapidement à sembler laid. Aussi ces deux pourraient être utilisés pour déterminer si le nombre est une puissance de 2, et ce que le pouvoir est. Fondamentalement, la plus faible et la plus élevée doit être la même. Voici une page intéressante et utile: graphics. stanford. edu/ Ces réponses sont correctes si le résultat reste dans la limite de précision du processeur. L'erreur est à supposer que la multiplication est O (1). Il est pas lorsque votre précision doit dépasser le construit en précision. Lorsque vous multipliez deux 10 nombres de bits, l'algorithme utilisé est un changement et d'ajouter que le cycle de must pour tous les 10 bits. Si je devais faire un certain nombre de 10 bits à la puissance 8, il faudrait 70 postes et ajoute en utilisant une boucle courte qui multiplie le résultat par le nombre 7 fois. En utilisant l'algorithme de puissance qui réduit les étapes de la moitié à chaque fois, double effectivement la quantité de travail qu'il doit faire. Augmenter le même nombre de 10 bits à la puissance 8 donnera: 10 postes et ajoute pour obtenir X * X. Mais maintenant, X est un nombre 20 bits devant être porté à la puissance 4. La prochaine fois emmène à travers 20 postes et ajoute, avec X résultant en un nombre de 40 bits qui doit être carré. La dernière passe prend 40 postes et ajoute et X est le résultat. En ajoutant les passes jusqu'à 10 + 20 + 40, est de 70 quarts de travail et ajoute. Ceci est plus efficace que d'utiliser une boucle simple multiplication. répondit le 11 novembre '15 à 20:40 Il vous manque un cas pour n ou déléguer à Math. pow () dans ce cas. répondit le 7 mars '14 à 01h19 Espacement. if (n == 0) et si (n == 1). Bretelles: Bien que facultative pour les déclarations simples mais la plupart préfèrent que ce soit là. Votre choix. Naming: Bien que son une méthode simple mais on pourrait utiliser des variables comme la base, exposant. Peut pow magasin LONG_MAX ^ INT_MAX. Sinon, nous devrions utiliser exception Long et jet pour les cas hors de portée? Puisque la puissance est un int. voulez-vous gérer des puissances négatives aussi bien ou un chèque de n0 est nécessaire? Un autre algorithme vous pouvez recourir à: Son nettement plus rapide que Math. pow (). lien Ideone. répondit le 29 décembre '14 à 05h27 2016 Stack Exchange Inc
No comments:
Post a Comment