Doublons possibles:
Is shifting bits faster than multiplying and dividing in Java? .NET?
Quick Java Optimization QuestionDois-je changer de bit pour diviser par 2 en Java?
Il y a plusieurs années à l'université, j'ai appris que peu-décalage vers la droite par une accomplit la même chose que la division par deux, mais il est généralement significativement plus rapide. Je ne suis pas sûr de la façon dont Java est venu à cet égard depuis les 9-10 ans, j'ai appris à ce sujet. Est-ce que le compilateur Java convertit automatiquement une division par deux en une opération de décalage de bits, ou dois-je effectuer manuellement l'opération de décalage de bits dans le code moi-même?
http://stackoverflow.com/questions/1514949/quick-java-optimization-question Il adresse la multiplication par deux, mais les réponses sont applicables. –
En général, si l'opération A accomplit * exactement * la même chose que l'opération B et le fait plus vite, quelque part le long de la ligne B sera probablement optimisé en A. Le problème est quand il y a des différences de casiers. être optimisé dans l'autre. Dans ces cas, vous devez 1) évaluer si la différence de performance compte réellement (pas d'optimisation prématurée!), 2) tenir compte des cas frontaliers (programme autour d'eux ou prouver qu'ils ne seront pas touchés, et 3) déterminer si les gains existent et justifier la diminution de la lisibilité. –
Je suis profondément attristé par l'éventail des réponses à cette question. Premièrement, la division par deux et le déplacement à droite ne donneront pas le même résultat pour les nombres négatifs dans tous les cas. Deuxièmement, lorsque le résultat décalé est suffisant, il est environ 10 à 20 fois plus rapide que la division. Troisièmement, le compilateur n'optimisera pas cela parce que dans n'importe quel cas non trivial il sera incapable de prouver que l'opérande décalé n'est pas négatif. Oh et les réponses de la question de multiplication ne couvrent pas la division, car la situation avec les optimiseurs est différente xD – Durandal