begin process at 2013 05 22 11:11:12
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Maths & Algorithmes

 > [AINSI-C]CALCUL D'UNE RACINE CARRÉE PAR ALGORITHME D'HÉRON

[AINSI-C]CALCUL D'UNE RACINE CARRÉE PAR ALGORITHME D'HÉRON


 Information sur la source

Note :
8,5 / 10 - par 2 personnes
8,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Maths & Algorithmes Niveau :Débutant Date de création :08/07/2002 Date de mise à jour :13/11/2005 16:54:37 Vu / téléchargé :17 533 / 171

Auteur : kjus

Ecrire un message privé
Commentaire sur cette source (4)
Ajouter un commentaire et/ou une note

 Description

Comment calculer une racine carrée sans la librairie math.h ?
Il existe de nombreux algorithme, et j'ai choisi l'algorithme d'héron pour sa simplicité et sa précision remarquable.
c'est une suite : an+1=(an+A/an)/2
avec A=le nombre dont on calcule la racine
a(0)=un nombre quelquonque !
cette suite converge vers sqrt(A) très rapidement (d'autant plus rapidement que a0 est proche de sqrt(A))
Compile sous linux et windows.. (executable win + source dans le zip)

Source

  • // calcul les racines carrées avec l'algo d'héron
  • #include <stdio.h>
  • void about(void);
  • int main(void) {
  • int increment;
  • float resultat;
  • float acalculer;
  • float an;
  • float an1;
  • about();
  • do {
  • printf("calcul des racines carrees par les approximation d'heron\n");
  • printf("entrez un nombre dont on va calculer sa racine carre : \n");
  • scanf("%f", &acalculer);
  • }while(acalculer<=0);
  • an=acalculer;
  • for (increment=0;increment<8;increment++) {
  • an1=(an+(acalculer)/an)/2;
  • an=an1;
  • }
  • resultat=an1;
  • printf("resultat = %f\n\n", resultat);
  • if (getchar()=='\n')
  • getchar();
  • return 0;
  • }
  • void about(void) {
  • printf("programmé par kjus\n");
  • }
// calcul les racines carrées avec l'algo d'héron

#include <stdio.h>
void about(void);
int main(void) {

	int increment;
	float resultat;
	float acalculer;
	float an;
	float an1;
    about();
       do {
	printf("calcul des racines carrees par les approximation d'heron\n");
	printf("entrez un nombre dont on va calculer sa racine carre : \n");
	scanf("%f", &acalculer);
          }while(acalculer<=0);
	an=acalculer;
	for (increment=0;increment<8;increment++) {
	
	an1=(an+(acalculer)/an)/2;
	an=an1;	
	
	}
	resultat=an1;
printf("resultat =  %f\n\n", resultat);
if (getchar()=='\n')
   getchar();
	
return 0;

}
void about(void) {
printf("programmé par kjus\n");
}

 Conclusion

licence gpl.
pas de bugs connus.

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

12 octobre 2005 00:40:58 :
corrections mineures
13 novembre 2005 16:54:38 :
modification mineure du source

 Sources du même auteur

Source avec Zip Source avec une capture GTKVOC : APPRENDRE SON VOCABULAIRE PLUS FACILEMENT !
Source avec Zip Source avec une capture [GTK+][WIN/GNULINUX]JEU D'ALLUMETTES
[AINSI-C]BRAINFUCK INTERPRETER ;)
Source avec Zip Source avec une capture [ALLEGRO] KPONG (PONG ÉVOLUÉ)
Source avec Zip VOCABULAIRE..

 Sources de la même categorie

Source avec Zip Source avec une capture FONCTIONS EN ACTION par ringo73
CALCUL DE PI AVEC LA BIBLIOTHÈQUE GMP par lann
Source avec Zip Source avec une capture MAGEO3D, POUR GÉRER LES POINTS ET LES VECTEURS DE L'ESPACE R... par pgl10
Source avec Zip Source avec une capture ALGORITHME ACO TOILE D'ARAIGNÉE par RyBeN
Source avec Zip Source avec une capture TRAITEMENT D'IMAGE EN C++, QT par Akham75

Commentaires et avis

Commentaire de mmuller57 le 08/07/2002 02:48:43

Pas mal mais il ne faut pas oublier que an doit être une estimation (valeur approchée) de la racine carrée ! non ?

Commentaire de kjus le 08/07/2002 14:21:58

effectivement la convergence est plus rapide lorsque "an" est proche de la racine carré. Mais ca marche avec n'importe quelle valeur. La convergence est très rapide.

Commentaire de marik7335 le 16/01/2005 23:43:49

Salut à tous,

     J'ai réaliser cet algo dans mes débuts en programmation c++ et c'est vrai que l'astuce est bien trouvée.

Par contre, la récursivité serait la bienvenue.

l'algorithme d'héron consiste, en effet, à effectuer des calculs tant que la precision attendue n'est pas atteinte.

au début X0 = A
puis X1 = 0.5 * ( A/X0 + X0) ..... etc
juqu'à ce que Xn²- A < precision

Pour plus de simplicité on aurait pu écire la fonction de cette manière :

double RacineCarree(int A, double Xn, double precision)
{
        if( (Xn*Xn) - A ) > precision
              return RacineCarree(A, 0.5 * ( (A/Xn) + Xn ), precision);
        else return Xn;
};

il faudra déclarer cette fonction comme ceci
Si A=7
cout << RacineCarree(7,7,0.0001); par exemple

Voilà

Commentaire de BruNews le 16/03/2006 17:24:18 administrateur CS

La récursivité n'est quasi jamais la bienvenue ni pour la stack qui risque de sauter ni pour les perfs, c'est généralement le signe qu'on n'a pas réussi à s'en débarrasser.

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Mai 2013
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,796 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales