#include <stdio.h>
void main() {
float f;
double d;
f = 0.5;
printf("f=%f\n", f);
f = (float)0.5;
printf("0.5=%f\n", 0.5);
printf("0.5f=%f\n", 0.5f);
printf("0.9=%f\n", 0.9);
printf("1.9=%f\n", 1.9);
d = 0.5;
printf("d0.5=%f\n", d);
printf("1.0/2.0=%f\n", 1.0 / 2.0);
}
Je le compile sur H-UX 11.11 et je l'exécute :
#/usr/bin/cc c.c
#a.out
f=0.500000
0.5=0.500000
0.5f=0.500000
0.9=0.900000
1.9=1.900000
d0.5=0.500000
1.0/2.0=0.500000
Jusqu'à la tout va bien.
Je le compile à distance depuis une machine Solaris :
solaris#rsh machineHP /usr/bin/cc c.c
et je l'execute sur HP :
#a.out
f=0.000000
0.5=0.000000
0.5f=0.000000
0.9=0.000000
1.9=1.000000
d0.5=0.000000
1.0/2.0=0.500000
Et là, c'est la catastrophe. Tous les litéraux flottant sont arrondis à l'entier inférieur. Les bras m'en tombent.Comment est-ce possible ?
# il me semble que par défaut
Posté par fearan . Évalué à 3.
donc %lf pour les printf
mais bon j'ai rien pour tester sous la main alors t'as plus qu'a essayer ( ou alors cast en float
Il ne faut pas décorner les boeufs avant d'avoir semé le vent
[^] # Re: il me semble que par défaut
Posté par locnet . Évalué à 1.
[^] # Re: il me semble que par défaut
Posté par fearan . Évalué à 3.
en fait %f attend un double :P
donc %hf je crois ou alors défini tes constante en double :)
man printf ^^
Il ne faut pas décorner les boeufs avant d'avoir semé le vent
[^] # Re: il me semble que par défaut
Posté par locnet . Évalué à 1.
[^] # Re: il me semble que par défaut
Posté par fearan . Évalué à 2.
:)
Il ne faut pas décorner les boeufs avant d'avoir semé le vent
[^] # Re: il me semble que par défaut
Posté par locnet . Évalué à 1.
rsh sir01hp /usr/bin/cc +w1 c.c
cc: warning 486: The default compilation mode, -Ae (ANSI), is being used. This default has changed from -Ac (K&R C).
cc: warning 474: By default 'const' qualified objects are now stored in literal space using +ESconstlit. This may lead to run-time errors if the semantics of 'const' are violated.
Le code ne compile pas ave -Ac.
Et même, si je le modifie pour que ça compile, ca ne fonctionne toujours pas.
[^] # Re: il me semble que par défaut
Posté par alf . Évalué à 1.
Pour les autres cas, dans son code, les constantes 0.5 et autres sont de type double, donc le produit aussi, donc il n'y a aucun problème de typage dans son code (à part le fait que main renvoie un int).
# Compilation sur Solaris, execution sur HP-UX???
Posté par Pascal . Évalué à -1.
Tu as même de la chance d'avoir autre chose que SEGFAULT.....
[^] # Re: Compilation sur Solaris, execution sur HP-UX???
Posté par locnet . Évalué à 1.
Je compile et execute sur HP.
Dans le dernier cas, j'ai juste déclenché la compilation HP depuis une machine Solaris.
J'imagine que cela a une influence sur l'environnement de la compilation, mais de la à transformer 0.5 en 0 ....
# La réponse
Posté par locnet . Évalué à 0.
solaris# rsh machineHP "setenv LANG C ; /usr/bin/cc c.c"
fonctionne !
Il manquant "setenv LANG C".
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.