PIC, Problème calculs à virgule
Répondre à la discussion
Affichage des résultats 1 à 20 sur 20

PIC, Problème calculs à virgule



  1. #1
    Platipu$

    PIC, Problème calculs à virgule


    ------

    Bonjour,

    Voilà mon problème, je réalise un calcul dont le résultat est entre 0 et 1 et le résultat n'a jamais de chiffre après la virgule ! ça marchait sur un PIC 18F252 et depuis mon passage à un 18F4550 (et des modifs de prog en même temps), ça marche plus !

    Voici la ligne de calcul :
    Code:
    tmp[i] = (ANval[i] - JoyBd[i][0]) / (JoyDZ[i][0] - JoyBd[i][0]) * demiPi;
    Et les déclarations de variables liées :
    Code:
    float JoyDZ[6][2]; //Limites des zones mortes, fixes
    float JoyBd[6][2]; //Mini et Maxi des joysticks, fixes
    float ANval[6]; //Val num sur RA0 et RA1, de 1 à 1024
    float tmp[6];
    #define Pi 3.14159265;
    #define demiPi = 1.570796325;
    tmp[i] est toujours soit 0, soit 1 et je ne comprend pas pourquoi.

    Mikaël.

    -----

  2. #2
    Platipu$

    Re : PIC, Problème calculs à virgule

    J'ai même essayé le test classique
    Code:
    tmp3[i] = 5/2;
    tmp3 étant en double

    et ça marche pas, ça me sort 2 ! et pas 2.5
    Je vois pas. C'est un basique et j'ai jamais eu ce pb !

  3. #3
    Short

    Re : PIC, Problème calculs à virgule

    5/2 ne donne que la partie entière de la division non?
    UTC- Génie Mécanique

  4. #4
    Platipu$

    Re : PIC, Problème calculs à virgule

    Effectivement, si je met 5/2 ça rend que la partie entière et si je met 5.0/2, ça rend 2.5

    Mais ça règle pas mon problème concernant ma fonction qui ne rend que 0 ou 1 ! Je ne sais pas comment forcer un résultat à virgule

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

    Re : PIC, Problème calculs à virgule

    désolé je ne trouve pas ><
    UTC- Génie Mécanique

  7. #6
    carcan

    Re : PIC, Problème calculs à virgule

    Salut !

    si tu fais tmp[0] = demiPi; ça donne quoi ?
    En fait, je me pose la question si on peut déclarer des constantes non entières avec #define.

    A+
    Laurent

  8. #7
    Jack
    Modérateur

    Re : PIC, Problème calculs à virgule

    il faut caster (transtyper) un des termes de la division en float. Par exemple:

    tmp[i] = (float)(ANval[i] - JoyBd[i][0]) / (JoyDZ[i][0] - JoyBd[i][0]) * demiPi;
    A+

  9. #8
    Platipu$

    Re : PIC, Problème calculs à virgule

    Merci de votre aide,
    J'ai déjà essayé de caster un des termes avec (double) et ça n'a pas marché, je vais essayer avec (float).
    J'essayerai aussi l'idée de carcan.
    Je vous tiens au courant dès que l'essai est fait.
    Mikaël.

  10. #9
    Jack
    Modérateur

    Re : PIC, Problème calculs à virgule

    Citation Envoyé par Platipu$ Voir le message
    Merci de votre aide,
    J'ai déjà essayé de caster un des termes avec (double) et ça n'a pas marché, je vais essayer avec (float).
    J'essayerai aussi l'idée de carcan.
    Je vous tiens au courant dès que l'essai est fait.
    Mikaël.
    C'est étonnant, car le principe est le même. Il faudrait que tu nous montres ton code.

    A+

  11. #10
    Seb.26

    Re : PIC, Problème calculs à virgule

    Code:
    #define Pi 3.14159265;
    #define demiPi = 1.570796325;
    Bizarres tes #define ?! ...
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  12. #11
    PIC sur PAC

    Re : PIC, Problème calculs à virgule

    Bonjour,
    Si le compilateur ne dit rien pour define et egale sur la même ligne tu dois calculer (trucmuche)*= demipi. non
    Dans le doute reboot

  13. #12
    Jack
    Modérateur

    Re : PIC, Problème calculs à virgule

    et en plus, les ; à la fin, ça craint ...

    A+

  14. #13
    PIC sur PAC

    Re : PIC, Problème calculs à virgule

    Je les avaient même pas vus
    Et cela peut passer un "define ;" à la compile sans te sortir un jeu d'insulte?
    Dans le doute reboot

  15. #14
    Jack
    Modérateur

    Re : PIC, Problème calculs à virgule

    oui, avec de la chance. Par exemple:
    Code:
    x = 2 * Pi;
    passera, mais pas
    Code:
    x = Pi * 2;
    A+

  16. #15
    Platipu$

    Re : PIC, Problème calculs à virgule

    Citation Envoyé par Seb.26 Voir le message
    Code:
    #define Pi 3.14159265;
    #define demiPi = 1.570796325;
    Bizarres tes #define ?! ...
    Effectivement, j'ai fait une boulette en recopiant le code dans ce post, mes #define dans mon code ne comportent pas le "=" évidemment, désolé .
    Et je vous rassure, si le "=" est présent, le compilateur bugue.

  17. #16
    carcan

    Re : PIC, Problème calculs à virgule

    Hello !

    et ça donne quoi si tu déclares tes constantes comme ça en variables globales :
    float Pi=3.1415;

    A+
    Laurent

  18. #17
    Platipu$

    Re : PIC, Problème calculs à virgule

    J'ai testé plusieurs trucs, le test de carcan est le plus probant :
    Code:
    tmp[i] = demiPi;
    sachant que :
    Code:
    float demiPi = 1.570796325;
    float tmp[6];
    ça me donne 1. Il me prend pas ce qui est derrière la virgule...

    J'ai essayé comme ça (on sait jamais si c'est le tableau qui merde) :
    Code:
    tmp = demiPi;
    ça m'affiche toujours 1

    Seulement en enlevant le #define (déclaration comme une constante) ma application marche, mais ça m'affiche tjrs 0 ou 1.

    Et en fait, bordel, je me suis rendu compte que c'est la valeur affichée qui est à 0 ou 1. Donc, en changeant de version de compilateur (MikroC pour info), ma fonction d'affichage suivante :
    Code:
      WordToStr(tmp[0], text);
      LCD_Out(1,1,text);
    s'écrit tjrs pareil, mais ne gère apparemment pas de la même façon les chiffres à virgule !

    Je vais devoir travailler sur cette fonction et la comprendre pour pouvoir débuguer efficacement mon prog.

  19. #18
    Platipu$

    Re : PIC, Problème calculs à virgule

    Effectivement, si je fais
    Code:
      WordToStr(tmp[0]*1000, text);
      LCD_Out(1,1,text);
    il m'affiche 1570. Donc ça marche si j'enlève mes #define

    Ce qui est ch****, c'est que la fonction WordToStr marchait avec les nombre non entiers avant le changement de version.

  20. #19
    Forhorse

    Re : PIC, Problème calculs à virgule

    Il y a peut être de nouvelles instructions qui gèrent spécifiquement l'affichage de nombre en virgule flottante (par exemple qui permet de choisir le nombre de décimal à afficher)

  21. #20
    Seb.26

    Re : PIC, Problème calculs à virgule

    d'où l'intérêt d'utiliser les instructions et un compilo ANSI ... essaye d'utiliser sprintf() pour voir ...
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

Discussions similaires

  1. Problème de calculs
    Par invitec8d113ca dans le forum Mathématiques du collège et du lycée
    Réponses: 5
    Dernier message: 28/11/2010, 21h18
  2. Le point virgule en math
    Par invite53a16232 dans le forum Mathématiques du collège et du lycée
    Réponses: 1
    Dernier message: 02/12/2009, 08h46
  3. problème calculs de pH
    Par invited6294750 dans le forum Chimie
    Réponses: 3
    Dernier message: 23/10/2009, 08h24
  4. puissance 10 à virgule
    Par petitours dans le forum Mathématiques du supérieur
    Réponses: 3
    Dernier message: 12/08/2009, 11h02
  5. [Biologie Moléculaire] Problème de calculs...!!!
    Par invitef9048d1d dans le forum Biologie
    Réponses: 4
    Dernier message: 12/01/2009, 15h00
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...