Calcul de puissance en C ( pour Arduino )
Répondre à la discussion
Affichage des résultats 1 à 12 sur 12

Calcul de puissance en C ( pour Arduino )



  1. #1
    Debutant72

    Calcul de puissance en C ( pour Arduino )


    ------

    Bonjour à toutes et à tous,

    Je débute dans la programmation d'une carte Arduino.
    Le langage serait une forme de C ( n'ayant aucune expérience dans ce domaine, je n'affirme donc rien à ce sujet ).

    Depuis hier, je cherche à calculer le résultat de 2 élevé à une puissance pouvant aller de 7 à 0 selon les cas.
    Ce qui donne :

    Déclaration initiale :
    int Valeur=0;

    Dans la boucle :
    for (int i=7; i>-1; i--)
    {
    Valeur = pow(2,i);
    }
    Le résultat n'est pas bon puisque j'ai à chaque fois une valeur inférieure de 1 par rapport au bon résultat.
    J'ai éssayé aussi de déclarer Valeur en type byte sans résultat.
    J'ai aussi éssayé de ruser en écrivant Valeur = pow(2,i)+ 1, mais là, ça ne marche que dans 7 cas sur 8 ( dans un cas, le résultat est au dessus de +1 ).

    J'ai cherché sur le net mais j'ai rien trouvé qui fonctionne.
    Ils causent bien de variable double, float, ... que j'ai éssayé mais sans résultat.

    Quelqu'un a t-il une idée sur ce problème ?

    Merci d'avance pour votre aide.

    -----

  2. #2
    whoami

    Re : Calcul de puissance en C ( pour Arduino )

    Bonjour,

    Le code m'a l'air correct. Et test chez moi avec
    Code:
        for (int i=7; i>-1; i--)
        {
            int Valeur;
            Valeur = pow(2,i);
            printf("i = %d, %d\n",i,Valeur);
        }
    j'obtiens bien
    Code:
    i = 7, 128
    i = 6, 64
    i = 5, 32
    i = 4, 16
    i = 3, 8
    i = 2, 4
    i = 1, 2
    i = 0, 1
    ce qui est le résultat attendu.

  3. #3
    Debutant72

    Re : Calcul de puissance en C ( pour Arduino )

    Bonjour whoami,

    Merci d'avoir consacré un peu de temps à mon problème.
    Sur l'Arduino, ça marche pas pour des histoires d'arrondis et de type de variable.
    De ce fait, je range la fonction "pow() avec des entiers" au placard.

    On m'a conseillé d'utiliser l'instruction readbit(variable,position du bit) pour mon besoin.
    Ca marche super et ça simplifie grandement l'écriture.

    Mon problème est donc règlé.

    Merci encore pour ton aide.

  4. #4
    polo974

    Re : Calcul de puissance en C ( pour Arduino )

    Pour les puissances entières de 2:
    Code:
    Valeur = 1<<i;
    ça évite de passer par les float (ou double), c'est rapide, efficace ...

    et juste ...

    enfin, tant qu'on ne déborde pas !
    Jusqu'ici tout va bien...

  5. A voir en vidéo sur Futura
  6. #5
    Philippe8

    Re : Calcul de puissance en C ( pour Arduino )

    Bonjour,

    Ayant le même problème avec pow(16,x). Existe t'il un moyen de contourner le PB en base 16 ?

    Code:
    for (int i=7; i>-1; i--)
    {
    Valeur = pow(16,i);
    }
    Le résultat de valeur est faux sur arduino uno.

    Merci par avance pour votre aide.
    Dernière modification par JPL ; 28/01/2022 à 14h23. Motif: ajout de la balise Code

  7. #6
    pm42

    Re : Calcul de puissance en C ( pour Arduino )

    En C tu peux utiliser <<.
    1 << n donne 2^n et est très rapide.

  8. #7
    umfred

    Re : Calcul de puissance en C ( pour Arduino )

    16 étant 2^4 (ou encore 1<<4) tu peux donc écrire (1<<4)<<i

  9. #8
    jiherve

    Re : Calcul de puissance en C ( pour Arduino )

    bonjour
    même type de réponse que le #4
    16^i= 16<<((i-1)<<2) si i> 0
    16^0 = 1
    JR
    l'électronique c'est pas du vaudou!

  10. #9
    umfred

    Re : Calcul de puissance en C ( pour Arduino )

    en fait avec 1<<(4*i) ça fonctionne tout le temps ( pour i >=0) si je ne dis pas de bêtises comme à ma réponse précédente

  11. #10
    pm42

    Re : Calcul de puissance en C ( pour Arduino )

    Citation Envoyé par umfred Voir le message
    en fait avec 1<<(4*i) ça fonctionne tout le temps ( pour i >=0) si je ne dis pas de bêtises comme à ma réponse précédente
    Non, ça marche très bien.

  12. #11
    Philippe8

    Re : Calcul de puissance en C ( pour Arduino )

    1<<(4*i)==> c'est parfait. Si on décompose l'instruction, c'est logique.
    MCI.
    Dernière modification par Philippe8 ; 28/01/2022 à 20h34.

  13. #12
    Philippe8

    Re : Calcul de puissance en C ( pour Arduino )

    16^i ==>
    Code:
    1<< (4*i)
    (16 est une puissance de 4)

    0000 0000 0000 0001 i=0 1<<0 16^0 = 1
    0000 0001 0000 0000 i=2 1<< 8 16^2 = 256
    0001 0000 0000 0000 i=3 1<< 12 16^3 = 4096

    MCI

Discussions similaires

  1. calcul de puissance et de tension pour un alternateur
    Par invite2cc7fc09 dans le forum Physique
    Réponses: 4
    Dernier message: 29/05/2010, 07h33
  2. Calcul de dissipation de puissance pour une résistance
    Par invite3c76345c dans le forum Électronique
    Réponses: 1
    Dernier message: 21/08/2009, 05h50
  3. Calcul de puissance pour dimenssionement d'un moteur
    Par invite2a480bc3 dans le forum Technologies
    Réponses: 8
    Dernier message: 10/05/2009, 19h41
  4. [Divers] Calcul de puissance pour choix GE
    Par invite8b5a4a9f dans le forum Dépannage
    Réponses: 2
    Dernier message: 05/02/2009, 18h12
  5. besoin d'aide pour calcul de puissance chaudière fuel
    Par invite99e521e1 dans le forum Habitat bioclimatique, isolation et chauffage
    Réponses: 1
    Dernier message: 04/10/2008, 05h56