Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1276 connectés 

  FORUM HardWare.fr
  Programmation

  [C++] Faire une racine carrée et un arrondi!! C'est pas compliqué!!!

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C++] Faire une racine carrée et un arrondi!! C'est pas compliqué!!!

n°21658
Cytoplasm
Posté le 01-04-2001 à 12:32:53  profilanswer
 

j'ai x^2  
je veux y= arrondi de x

mood
Publicité
Posté le 01-04-2001 à 12:32:53  profilanswer
 

n°21662
verdy_p
Posté le 01-04-2001 à 13:08:58  profilanswer
 

Cytoplasm a écrit a écrit :

j'ai x^2  
je veux y= arrondi de x




int y(int x2){
int res=65536,old;
do{old=res;res=(old+x2/old)/2);}while(res!=old);
return res;
}
On calcule ici la racine carrée de x2, arrondi à l'entier inférieur. La valeur de départ de res peut être quelconque, mais ici 65536 est une optimisation en moyenne du nombre de boucles qui est réduit à 16 boucles au pire si int est sur 32 bits. En partant de 1 on aurait jusqu'à 31 boucles, et en partant de 0 on en aurait jusqu'à 32 au pire.

 

[edit]--Message édité par verdy_p--[/edit]

n°21670
wave
Posté le 01-04-2001 à 15:04:32  profilanswer
 

#include <math.h>
 
y=(int)(sqrt(x));

n°21677
z51
Posté le 01-04-2001 à 17:42:01  profilanswer
 

Pour obtenir l'entier le plus proche ajoute 0.5 avant de convertir :
 
y=(int)(sqrt(x)+0.5f);

n°21685
verdy_p
Posté le 01-04-2001 à 19:52:01  profilanswer
 

Evidemment avec sqrt() c'est plus simple, mais plus long sur la plupart des machines dans le cas des entiers, sauf si le compilateur sait convertir sqrt() comme un intrinsèque en code FPU, et si le processeur a une FPU rapide sachant exécuter une racine carrée, une addition, et une conversion entière en 1 cycle machine. Sinon, c'est prendre une usine à gaz pour écraser une mouche.

n°21703
la viper
Posté le 01-04-2001 à 23:05:21  profilanswer
 

lol .. si tu veux faire pleurer ton CPU fait lui calculer PI ..
 
la solution la plus simple est tjrs la meilleure - faut pas l'oublier !
 
et la solution la plus simple c'est la plus courte - et donc la moins buggée.
 
ex : pour afficher l'heure sur son pc :
- on utilise les bibliotheque de base
- on joue avec l'interruption de l'horloge
- on appelle l'horlogue parlante toutes les secondes ;-)
 
j'ai deja testé toutes les solutions .. bah moi je crois que ca sert a rien de reinventer le monde tous les 4 matins .. surtout pour un truc aussi eprouvé que la racine carrée.

n°21717
BENB
100% Lux.
Posté le 02-04-2001 à 09:04:50  profilanswer
 

verdy_p a écrit a écrit :

Evidemment avec sqrt() c'est plus simple, mais plus long sur la plupart des machines dans le cas des entiers, sauf si le compilateur sait convertir sqrt() comme un intrinsèque en code FPU, et si le processeur a une FPU rapide sachant exécuter une racine carrée, une addition, et une conversion entière en 1 cycle machine. Sinon, c'est prendre une usine à gaz pour écraser une mouche.




Honnetement tu crois que ton code s'execute en un cycle machine ?
Tu devrait le coder en asm et les division par deux pourquoi ne pas utiliser des decalages de bits ?
 
Restons serieux sqrt est beaucoup plus lisible...

n°21910
BifaceMcLe​OD
The HighGlandeur
Posté le 03-04-2001 à 01:26:15  profilanswer
 

BENB> Tu vas dans le sens de Verdy. Le code qu'il a donné est toujours plus efficace dès lors qu'on travaille sur des entiers.
 
Croyez-moi, il y a des fois où le code que Verdy a donné est bien plus approprié (bien qu'il soit ici bien peu lisible, je vous l'accorde, mais vous pouvez le présenter un peu mieux à titre d'exercice). Tout dépend de ce que vous voulez faire / pas faire, du nombre de fois où vous exécutez votre code, etc.
 
Et à condition d'écrire "res=x2" (voire "res=x2 >> 1", n'est-ce pas BENB ;-) ) au lieu du beaucoup plus dangereux "res=65536", ce code est sans erreurs. Une fois caché dans une fonction appropriée, il n'aurau pas à changer, et il n'aura pas à être débogué => aussi sûr que le sqrt() sur des flottants (voire plus, puisque pas de problème d'arrondi).


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  [C++] Faire une racine carrée et un arrondi!! C'est pas compliqué!!!

 

Sujets relatifs
Plus de sujets relatifs à : [C++] Faire une racine carrée et un arrondi!! C'est pas compliqué!!!


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR