IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Calcul flottants C


Sujet :

C

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2018
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Calcul flottants C
    Bonjour,

    Je commence le C et j'ai un problème sur un calcul basique de flottants. J'ai beau cherché je ne vois pas l'erreur.
    Le but de mon programme est qu'un client envoie des chiffres à un serveur qui lui doit calculer le résultat de l'opération. Ca marche très bien avec des entiers mais quand je passe au flottant ca ne marche plus !
    Voici un bout de mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
        char operateur;
        int nbvalue;
        float numero1, numero2;
        nbvalue = sscanf(data, "%*s %c %f %f", &operateur, &numero1, &numero2);
        printf("%c %f %f \n",operateur, numero1, numero2);
        if (nbvalue != 3) { printf("erreur lecture \n");}
        switch (operateur) {
        case '+':   
        {
          float som = somme(numero1,numero2);
          printf("%.2f",som);
          break;
        }
    Et la fonction censé me faire le calcul :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    float somme(num1, num2){  
          float addi = num1 + num2; 
          return addi;
    }
    Lorsque j'affiche mes flottants avant le calcul j'ai bien deux nombres flottants par exemple 9.500000 1.000000 mais en résultat je trouve 675619456.00. Pourquoi il m'affiche ce résultat ??

    Merci pour votre aide !

  2. #2
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 984
    Points
    30 984
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par Auguste2 Voir le message
    Et la fonction censé me faire le calcul :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    float somme(num1, num2){  
          float addi = num1 + num2; 
          return addi;
    }
    Lorsque j'affiche mes flottants avant le calcul j'ai bien deux nombres flottants par exemple 9.500000 1.000000 mais en résultat je trouve 675619456.00. Pourquoi il m'affiche ce résultat ??
    Déjà il manque les types à "num1" et "num2". Bon j'ai jamais écrit de fonction où les arguments ne sont pas typés donc ce que je dis c'est une hypothèse (et je ne sais même pas si ça compile) mais un truc non connu est typé "int" par défaut. Donc il se peut que "num1" et "num2" soient traités comme des int. Or le codage interne d'un flottant et d'un int n'ont rien à voir.

    Autre chose: une fonction qui n'est pas connue avant d'être appelée est alors considérée comme "int". C'est pour ça qu'on les prototype en début de code (ou alors on les écrit avant de les appeler).
    Donc (encore une hypothèse) si tu as codé "somme" après son appel, même en étant citée "float" elle est quand-même connue "int" et ça au retour ça donne des résultats analogues à ce que tu as. Et si c'est le cas ton compilo a dû t'afficher des warnings que tu aurais dû prendre en considération.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2018
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    J'ai testé en mettant num1 et num2 avec le type float mais rien n'a changé. Pour ce qui est de la fonction somme je l'ai bien codée avant de l'appeler donc je ne pense pas que l'erreur vienne de là.

  4. #4
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 984
    Points
    30 984
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Auguste2 Voir le message
    Pour ce qui est de la fonction somme je l'ai bien codée avant de l'appeler donc je ne pense pas que l'erreur vienne de là.
    Ben oui mais sans le code complet, on ne peut pas deviner ce qui se passe. Déjà moi j'aurais affiché num1, num2 et addi dans la fonction pour cibler l'endroit de l'erreur.

    Et sinon voici un mini-code analogue au tien qui, lui produit le bon résultat
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    #include <stdio.h>
     
    float somme(float num1, float num2){  
    	float addi = num1 + num2; 
    	return addi;
    }
     
    int main() {
    	char operateur='+';
    	int nbvalue;
    	float numero1=9.5;
    	float numero2=1.0;
    	float calc;
    	switch (operateur) {
    		case '+':   
    			calc=somme(numero1,numero2);
    	  		printf("%.2f\n",calc);
    	  		break;
    	}
    }
    Donc tu peux déjà le tester puis ensuite repartir de là pour rajouter tes propres trucs (la lecture de operateur, numero1 et numero2 depuis data entre autres). Il faudra d'aileur m'expliquer le "%*s" qui n'est relié à aucune variable.

    PS: et j'ai testé les paramètres sans type => ça compile (j'aurais jamais pensé mais le compilo me prévient quand-même qu'il les met en int) et ça me donne 9.5 + 1.0 = -1400945408.00
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2018
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Merci beaucoup. Je vais repartir de ça puis ajouter au fur et à mesure.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Calcul flottant
    Par electron22 dans le forum VHDL
    Réponses: 16
    Dernier message: 12/03/2014, 09h00
  2. Faire des calculs flottants précis
    Par shared_ptr dans le forum C++
    Réponses: 6
    Dernier message: 17/08/2011, 00h25
  3. petit problème de calcul flottant
    Par fred_sell dans le forum Débuter
    Réponses: 19
    Dernier message: 02/07/2010, 15h03
  4. Erreur de calcul flottant
    Par saimonn dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 07/08/2007, 16h26
  5. Calcul flottant
    Par Cold Hand dans le forum x86 32-bits / 64-bits
    Réponses: 4
    Dernier message: 10/02/2004, 17h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo