Bug ou erreur ?

Résolu/Fermé
oli5667
Messages postés
139
Date d'inscription
lundi 27 janvier 2014
Statut
Membre
Dernière intervention
23 novembre 2016
- Modifié par crapoulou le 1/02/2015 à 15:52
oli5667
Messages postés
139
Date d'inscription
lundi 27 janvier 2014
Statut
Membre
Dernière intervention
23 novembre 2016
- 5 févr. 2015 à 03:26
Bonjour,

J'ai écrit mon code qui est très simple mais les 4 dernières lignes se mettent une après l'autres dans le codes quand je le construit... Pourriez vous m'aidez

#include <stdio.h>
#include <stdlib.h>

int main()
{
    puts ("Valeurs initiales : 8 et 2");
    puts ("---------------------------------");
    printf ("Addition : %d\n",        8+2);
    printf ("Soustraction :  %d\n",   8-2);
    printf ("Multiplication : %d\n",  8*2);
    printf ("Division : %d\n",        8/2);
    puts ("---------------------------------");
    puts ("---------------------------------");
    puts ("Valeurs initiales : 8,2 et 7");
    puts ("---------------------------------");
    printf ("Addition : %d\n",        8+2+7);
    printf ("Soustraction :  %d\n",   8-2-7);
    printf ("Multiplication : %d\n",  8*2*7);
    printf ("Division : %d\n",        8/2/7);
    puts ("---------------------------------");
    puts ("---------------------------------");
    puts ("Valeurs initiales : 4.2, 5.4 et 9.21");
    puts ("----------------------------------");
    printf ("Addition : %2.2f",           4.2+5.4+9.21);
    printf ("Soustraction : %2.2f",       4.2-5.4-9.21);
    printf ("Multiplication : %2.4f",     4.2*5.4*9.21);
    printf ("Division : %2.8f",           4.2/5.4/9.21);

    return 0;
}


Je vous rappelle que se sont seulement les 4 dernières lignes (J'utilise Code::Blocks)
Merci d'avance

3 réponses

sambia39
Messages postés
609
Date d'inscription
vendredi 31 juillet 2009
Statut
Membre
Dernière intervention
24 juin 2016
47
Modifié par sambia39 le 1/02/2015 à 16:25
Bonjour
Tu as fait de petite erreur dans ton code (les quatre dernières lignes) tu à oublier de faire le retour chariot
 '\n' 
, mais ceci dit la division ne donne pas 0 mais bien 0.571429 avec un cast
 float 
( l'arrondit ) calculatrice = 0,57142857142
à bientôt
Celui qui peut, agit. Celui qui ne peut pas, enseigne. Il y a deux sortes de savants: les spécialistes, qui connaissent tout sur rien, et les philosophes, qui ne connaissent rien sur tout. G.B Shaw
0
fiddy
Messages postés
11067
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 804
2 févr. 2015 à 07:44
Juste pour info, il n'est pas question de float mais de double ici ;-).
0
sambia39
Messages postés
609
Date d'inscription
vendredi 31 juillet 2009
Statut
Membre
Dernière intervention
24 juin 2016
47 > fiddy
Messages postés
11067
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022

Modifié par sambia39 le 4/02/2015 à 13:01
Bonjour à tous ;)

 printf ("Division : %2.8f",           4.2/5.4/9.21); 

Je ne cherche pas à envenimer les choses mais juste comprendre pourquoi les types flottants ( la simple précision, double précision et la précision étendue) notamment la simple précision n'est pas ( forcement) une solution et qu'il est préférable d'utiliser une double précision ?
à ce que je sache elle donne toute un résultat limité par leur représentation respective.

Pour ma part corrigé moi si je me trompe, ces types flottant en langage C (ayant une taille finie, 32, 64& 128) n'imposent pas de prendre la norme comme argent comptent, mais préconise simplement le respect de norme. (IEEE-754)

Je pense que l'utilisation des types flottant son à faire selon l'opération souhaitée dans la limite de sa représentation (taille) de ce fait, une simple précision/double précision sera jugé optimale sur certaines opérations mathématiques nécessitant une simple précision ou une double précision, format de
 printf ();
ou pas son affichage dépendra de la représentation mathématique souhaitée et s'il faut s'assurer que dans le futur pour X raison garantir une suffisante marge de résultat d'opérations mathématiques en se penchera certainement sur une représentation en précision étendue.
(une variable peut prendre une valeur bien distincte c'est le type quand lui affecte qui permet de définir sa représentation mathématique et d'interpréter ces bits afin de fournir une valeur exemple 2^32, 2^64 ou 2^128 possible et des NaN peut apparaitre dans les calculs)

au finale 2/3 aura comme variable résultat un type float par exemple non ?
à bientôt
0
sambia39
Messages postés
609
Date d'inscription
vendredi 31 juillet 2009
Statut
Membre
Dernière intervention
24 juin 2016
47
2 févr. 2015 à 16:28
Bonjour
D'accord , mais dans le cas d'une simple division c'est souvent le
float
qui est utiliser.
Après rien n'empêche d'utiliser la double précision ou la précision étendue.
à bientôt
0
fiddy
Messages postés
11067
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 804 > sambia39
Messages postés
609
Date d'inscription
vendredi 31 juillet 2009
Statut
Membre
Dernière intervention
24 juin 2016

2 févr. 2015 à 18:28
Non c'est souvent le double qui est utilisé (1.5 est un double, sinon il faut mettre 1.5f) puis converti en float lorsque le type final est un float.
Ici on calcule un double et il est affiché tel quel (pas de conversion en float)
0
[Dal]
Messages postés
5852
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
25 mai 2022
994
Modifié par [Dal] le 3/02/2015 à 14:07
cela vient du standard du C, le C89 dit (3.1.3.1 Floating constants) :

An unsuffixed floating constant has type double. If suffixed by
the letter f or F, it has type float. If suffixed by the letter l
or L, it has type long double.


une constante à virgule est par défaut considérée comme un double.

c'est à distinguer du spécificateur %f de printf, qui a un autre objet, et qui, lui, permet d'afficher un nombre décimal à virgule, ce qui permet d'afficher un double comme un float.


Dal
0
oli5667
Messages postés
139
Date d'inscription
lundi 27 janvier 2014
Statut
Membre
Dernière intervention
23 novembre 2016
2
2 févr. 2015 à 00:22
Merci beaucoup!!!
0
oli5667
Messages postés
139
Date d'inscription
lundi 27 janvier 2014
Statut
Membre
Dernière intervention
23 novembre 2016
2
5 févr. 2015 à 03:26
Vous irez voir mon autre forum car j'ai vraiment besoin d'aide
Il se prénomme " fonction supplémentaire avec "switch"".
Merci d'avance
0