begin process at 2012 05 27 13:24:15
  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é :16 153 / 164

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 UN EXAMPLE D'APPLICATION EN CUDA DE L'ALGORITHME DE SCAN POU... par oguzaras
Source avec Zip Source avec une capture CHIFFREMENT DE VIGENERE par lajouad
Source avec Zip Source avec une capture ANALYSE SYNTAXIQUE par lajouad
Source avec Zip Source avec une capture STRUCTURE D'UNE MATRICE PAR LES LISTE LINÉAIRE (NON CONTUGUS... par benzarabel
Source avec Zip Source avec une capture DESSINER UNE ARBRE BINAIRE( MODE CONSOLE): par benzarabel

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...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

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,733 sec (3)

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