Le moyen le plus rapide pour obtenir la partie entière de sqrt(n)?

Comme nous le savons si n n'est pas un carré parfait, alors sqrt(n) ne serait pas un nombre entier. Car j'ai besoin d'uniquement la partie entière, j'ai l'impression que l'appel de sqrt(n) ne serait pas rapide, il faut du temps pour calculer la fraction de la partie également.

Donc ma question est,

Pouvons-nous obtenir uniquement la partie entière de sqrt(n) sans calculer la valeur réelle de sqrt(n)? L'algorithme devrait être plus rapide que sqrt(n) (défini dans <math.h> ou <cmath>)?

Si possible, vous pouvez écrire le code dans asm bloc également.

  • La plupart des Processeurs effectuer sqrt dans le matériel, il est donc peu probable que vous serez en mesure d'aller plus vite en calculant uniquement la partie entière.
  • Voici un lien intéressant pour un plus déterministe de l'algorithme: embedded-systems.com/98/9802fe2.htm
  • sqrt() dans la bibliothèque C est rare d'être directement mis en œuvre en tant que matériel sqrt instruction sur toutes les machines, depuis le matériel pourrait ne pas traiter tous les cas particuliers requis par la norme IEEE 754. Si vous n'aimez pas, vous pouvez utiliser inline asm ou du ccg -ffast-math pour accéder directement au matériel.
  • Peut-être que c' link peut vous aider.
  • assemblyrequired.crashworks.org/2009/10 montre quelques façons différentes de calculer la racine carrée de la PF en mathématiques; sqrt(x) (qui est juste FSQRT) est le plus lent à 24ns, avec SIMD versions étant le plus rapide, en moyenne moins de 1ns pour un rapprochement.
  • Quelle est la portée de n êtes-vous intéressé?
  • Toute la gamme, tant qu'un type peut la représenter.
  • avez-vous le profil de votre application? Êtes-vous sûr que vous avez besoin pour améliorer la sqrt(n) vitesse?

InformationsquelleAutor Nawaz | 2011-02-08