Algorithme de la racine carrée en binaire implémentée
Répondre à la discussion
Affichage des résultats 1 à 4 sur 4

Algorithme de la racine carrée en binaire implémentée



  1. #1
    invite457e1a8a

    Red face Algorithme de la racine carrée en binaire implémentée


    ------

    Bonjour, je dois implémanter la racine carrée en binaire. J'ai trouvé un algorithme qui permet de faire sa et le voila :
    Code:
    u16 racine(u32 valIn)
    {
    	u16 valOut = 0;
    	u32 diff = 0L;
    
    	for( int i=0 ; i<16 ; i++ ) {
    		diff <<= 2;
    		valOut <<= 1;
    
    		diff |= valIn>>30;
    		valIn <<= 2;
    
    		if( diff>2*valOut ) {
    			diff -= 2*valOut+1;
    			valOut++;
    		}
    	}
    	return valOut;
    }
    
    Ici u16 et u32 représentent des entiers respectivement de 16 et 32 bits.
    Je l'ai implémenté en c++ et voici le code :
    
    unsigned int racine(unsigned long int valIn)
    {
    	unsigned int valOut = 0;
    	unsigned long int diff = 0L;
    
    	for( int i=0 ; i<16 ; i++ ) {
    		diff <<= 2;
    		valOut <<= 1;
    
    		diff |= valIn>>30;
    		valIn <<= 2;
    
    		if( diff>2*valOut ) {
    			diff -= 2*valOut+1;
    			valOut++;
    		}
    	}
    	return valOut;
    }
    
    int main() {
    unsigned int valIn = 0b00000000000000000000000000010000;
    cout << racine(valIn) << endl;
    return 1;
    }
    Comme vous avez pu le voir, j'ai essayé l'algorithme en rentrant la valeur 16 en binaire et cela me retourne 5.
    Je me demande donc s'il y a un problème avec mon implémentation.
    Je vous remerci d'avance de votre aide m'excuse du dérangement occasioné.

    -----
    Dernière modification par JPL ; 04/05/2015 à 20h30. Motif: Ajout de la balise Code (#) pour garder l'indentation

  2. #2
    invite936c567e

    Re : Algorithme de la racine carrée en binaire implémentée

    Bonsoir

    L'algorithme est bon, et le code ci-dessus donne des résultats corrects sous Windows, compilé avec GCC.

    Néanmoins, tout-à-l'heure j'ai pu reproduire le problème sous MacOs X, avec une version plus ancienne de GCC.

    Peut-être s'agit-il d'un problème lié à l'interprétation du code par le compilateur ??

    Je tenterai de trouver où se situe l'erreur et comment la contourner quand j'aurai de nouveau mon Mac sous la main.

  3. #3
    invite936c567e

    Re : Algorithme de la racine carrée en binaire implémentée

    J'ai trouvé la source du problème. En fait elle n'est pas liée à la version du compilateur, mais à l'architecture de la machine cible.

    En effet, ce code a été conçu pour une architecture 32 bits, de sorte que la ligne de code :
    Code:
        valIn <<= 2;
    supprime les deux bits de poids fort décalés.

    Or, dans une architecture 64 bits (unsigned long sur 8 octets), ces deux bits sont conservés, et faussent le calcul.

    Pour régler le problème, il suffit de rajouter, immédiatement après, une ligne :
    Code:
        valIn &= 0xFFFFFFFFUL;
    La fonction devient donc :
    Code:
    unsigned int racine(unsigned long int valIn)
    {
    	unsigned int valOut = 0;
    	unsigned long int diff = 0L;
    
    	for( int i=0 ; i<16 ; i++ ) {
    		diff <<= 2;
    		valOut <<= 1;
    
    		diff |= valIn>>30;
    		valIn <<= 2;
    		valIn &= 0xFFFFFFFFUL;
    
    		if( diff>2*valOut ) {
    			diff -= 2*valOut+1;
    			valOut++;
    		}
    	}
    	return valOut;
    }

  4. #4
    invite457e1a8a

    Re : Algorithme de la racine carrée en binaire implémentée

    Oui c'est parfait cela marche très bien merci beaucoup.

  5. A voir en vidéo sur Futura

Discussions similaires

  1. Racine carrée de a/u(n-1)+u(n-2)+u(n-3)+ ...
    Par invite0e6ae34f dans le forum Mathématiques du supérieur
    Réponses: 1
    Dernier message: 17/02/2013, 16h19
  2. Racine Carrée
    Par invite7200c1fe dans le forum Mathématiques du collège et du lycée
    Réponses: 1
    Dernier message: 07/05/2012, 12h00
  3. Racine carrée de 3°
    Par invite294e288d dans le forum Mathématiques du collège et du lycée
    Réponses: 1
    Dernier message: 12/10/2010, 17h48
  4. Racine Carrée
    Par invited9862bac dans le forum Mathématiques du supérieur
    Réponses: 4
    Dernier message: 01/04/2010, 00h36
  5. Racine carrée
    Par invite3d3c8be1 dans le forum Mathématiques du supérieur
    Réponses: 7
    Dernier message: 25/08/2009, 16h58