Bonjour,
J'ai un souci pour printf-er des long double.
Avec gcc 4.1 (Ubuntu
AMD64), pas de problème avec:
printf("%Lfn", x);
En revanche sous Windows XP x64, gcc 3.4.5, pour afficher quelque chose
qui au moins me montre que le calcul s'est fait, je dois faire:
printf("%Lfn", (double)x);
J'ai positionné -stdÉ9
Pourtant la norme est claire.
Sans parler de bug, s'agit-il d'un truc connu, une implémentation
foireuse de C99 dans la version 3.4.5 ?
Dans ces conditions, et si je souhaite rester avec cette version, y
a-t-il une solution autre que le cast en double ?
Bonjour,
J'ai un souci pour printf-er des long double.
Avec gcc 4.1 (Ubuntu
AMD64), pas de problème avec:
printf("%Lfn", x);
En revanche sous Windows XP x64, gcc 3.4.5, pour afficher quelque chose
qui au moins me montre que le calcul s'est fait, je dois faire:
printf("%Lfn", (double)x);
J'ai positionné -stdÉ9
Pourtant la norme est claire.
Sans parler de bug, s'agit-il d'un truc connu, une implémentation
foireuse de C99 dans la version 3.4.5 ?
Dans ces conditions, et si je souhaite rester avec cette version, y
a-t-il une solution autre que le cast en double ?
Bonjour,
J'ai un souci pour printf-er des long double.
Avec gcc 4.1 (Ubuntu
AMD64), pas de problème avec:
printf("%Lfn", x);
En revanche sous Windows XP x64, gcc 3.4.5, pour afficher quelque chose
qui au moins me montre que le calcul s'est fait, je dois faire:
printf("%Lfn", (double)x);
J'ai positionné -stdÉ9
Pourtant la norme est claire.
Sans parler de bug, s'agit-il d'un truc connu, une implémentation
foireuse de C99 dans la version 3.4.5 ?
Dans ces conditions, et si je souhaite rester avec cette version, y
a-t-il une solution autre que le cast en double ?
Dans l'article ,
Pierre Maurette écrit:Bonjour,
J'ai un souci pour printf-er des long double.
Quel souci exactement? Erreur à la compilation? Plantage? Perte de
précision?
Dans l'article <mn.59cf7d7506b867b4.31483@laposte.net>,
Pierre Maurette <maurettepierre@wanadoo.fr> écrit:
Bonjour,
J'ai un souci pour printf-er des long double.
Quel souci exactement? Erreur à la compilation? Plantage? Perte de
précision?
Dans l'article ,
Pierre Maurette écrit:Bonjour,
J'ai un souci pour printf-er des long double.
Quel souci exactement? Erreur à la compilation? Plantage? Perte de
précision?
Dans l'article ,
Pierre Maurette écrit:Bonjour,
J'ai un souci pour printf-er des long double.
Quel souci exactement? Erreur à la compilation? Plantage? Perte de
précision?
Affiche n'importe quoi, ou plutôt n'importe quel flottant. Soit
-0.000000, soit un très grand négatif. Certainement un type lu à
l'adresse d'un autre, je n'ai pas enquêté dans le listing asm.
Pour le reste, le long double est en machine sur 80 bits. Son sizeof
fait 8 chez Microsoft, pour des raisons de compatibilté (après avoir
fait plus sur des versions antérieures).
Il fait 12 (donc padding) chez Gcc, pour des raisons soit de
compatibilité, soit d'alignement, je n'en sais rien. Il me semble
qu'il fait (faisait ?) 10 chez Borland.
Dans l'article <mn.59cf7d7506b867b4.31483@laposte.net>,
Pierre Maurette <maurettepierre@wanadoo.fr> écrit:
Bonjour,
J'ai un souci pour printf-er des long double.
Quel souci exactement? Erreur à la compilation? Plantage? Perte de
précision?
Affiche n'importe quoi, ou plutôt n'importe quel flottant. Soit
-0.000000, soit un très grand négatif. Certainement un type lu à
l'adresse d'un autre, je n'ai pas enquêté dans le listing asm.
Pour le reste, le long double est en machine sur 80 bits. Son sizeof
fait 8 chez Microsoft, pour des raisons de compatibilté (après avoir
fait plus sur des versions antérieures).
Il fait 12 (donc padding) chez Gcc, pour des raisons soit de
compatibilité, soit d'alignement, je n'en sais rien. Il me semble
qu'il fait (faisait ?) 10 chez Borland.
Dans l'article ,
Pierre Maurette écrit:Bonjour,
J'ai un souci pour printf-er des long double.
Quel souci exactement? Erreur à la compilation? Plantage? Perte de
précision?
Affiche n'importe quoi, ou plutôt n'importe quel flottant. Soit
-0.000000, soit un très grand négatif. Certainement un type lu à
l'adresse d'un autre, je n'ai pas enquêté dans le listing asm.
Pour le reste, le long double est en machine sur 80 bits. Son sizeof
fait 8 chez Microsoft, pour des raisons de compatibilté (après avoir
fait plus sur des versions antérieures).
Il fait 12 (donc padding) chez Gcc, pour des raisons soit de
compatibilité, soit d'alignement, je n'en sais rien. Il me semble
qu'il fait (faisait ?) 10 chez Borland.
Bonjour,
J'ai un souci pour printf-er des long double. Avec gcc 4.1 (Ubuntu
AMD64), pas de problème avec:
printf("%Lfn", x);
En revanche sous Windows XP x64, gcc 3.4.5, pour afficher quelque chose
qui au moins me montre que le calcul s'est fait, je dois faire:
printf("%Lfn", (double)x);
J'ai positionné -stdÉ9
Pourtant la norme est claire. Sans parler de bug, s'agit-il d'un truc
connu, une implémentation foireuse de C99 dans la version 3.4.5 ?
Dans ces conditions, et si je souhaite rester avec cette version, y
a-t-il une solution autre que le cast en double ?
Merci d'avance et bonne journée...
Bonjour,
J'ai un souci pour printf-er des long double. Avec gcc 4.1 (Ubuntu
AMD64), pas de problème avec:
printf("%Lfn", x);
En revanche sous Windows XP x64, gcc 3.4.5, pour afficher quelque chose
qui au moins me montre que le calcul s'est fait, je dois faire:
printf("%Lfn", (double)x);
J'ai positionné -stdÉ9
Pourtant la norme est claire. Sans parler de bug, s'agit-il d'un truc
connu, une implémentation foireuse de C99 dans la version 3.4.5 ?
Dans ces conditions, et si je souhaite rester avec cette version, y
a-t-il une solution autre que le cast en double ?
Merci d'avance et bonne journée...
Bonjour,
J'ai un souci pour printf-er des long double. Avec gcc 4.1 (Ubuntu
AMD64), pas de problème avec:
printf("%Lfn", x);
En revanche sous Windows XP x64, gcc 3.4.5, pour afficher quelque chose
qui au moins me montre que le calcul s'est fait, je dois faire:
printf("%Lfn", (double)x);
J'ai positionné -stdÉ9
Pourtant la norme est claire. Sans parler de bug, s'agit-il d'un truc
connu, une implémentation foireuse de C99 dans la version 3.4.5 ?
Dans ces conditions, et si je souhaite rester avec cette version, y
a-t-il une solution autre que le cast en double ?
Merci d'avance et bonne journée...
Salut Pierre
C'est mort, puisque gcc+mingw utilisent crtdll.dll, le run time
de windows, et les long doubles Microsoft connait pas.
Utilise plutot lcc-win32
http://www.cs.virginia.edu/~lcc-win32
Le seul compilateur C construit dans le 93!
Salut Pierre
C'est mort, puisque gcc+mingw utilisent crtdll.dll, le run time
de windows, et les long doubles Microsoft connait pas.
Utilise plutot lcc-win32
http://www.cs.virginia.edu/~lcc-win32
Le seul compilateur C construit dans le 93!
Salut Pierre
C'est mort, puisque gcc+mingw utilisent crtdll.dll, le run time
de windows, et les long doubles Microsoft connait pas.
Utilise plutot lcc-win32
http://www.cs.virginia.edu/~lcc-win32
Le seul compilateur C construit dans le 93!
J'ai un souci pour printf-er des long double.
Quel souci exactement? Erreur à la compilation? Plantage? Perte de
précision?
Affiche n'importe quoi, ou plutôt n'importe quel flottant. Soit
-0.000000, soit un très grand négatif. Certainement un type lu à
l'adresse d'un autre, je n'ai pas enquêté dans le listing asm.
Pour le reste, le long double est en machine sur 80 bits.
Son sizeof fait 8 chez Microsoft, pour des raisons de compatibilté
(après avoir fait plus sur des versions antérieures).
Il fait 12 (donc padding) chez Gcc, pour des raisons soit de
compatibilité, soit d'alignement, je n'en sais rien.
Il me semble qu'il fait (faisait ?) 10 chez Borland.
Si je fais tourner:
long double x = 1.2;
printf("%lun", (unsigned long)sizeof(double));
printf("%lun", (unsigned long)sizeof(long double));
printf("%Lfn", x);
printf("%fn", x);
printf("%Lfn", (double)x);
printf("%fn", (double)x);
J'ai tout bon chez Microsoft, et pas de warning (puisque %Lf accepte
bien sûr aussi bien double que long double)
J'ai un souci pour printf-er des long double.
Quel souci exactement? Erreur à la compilation? Plantage? Perte de
précision?
Affiche n'importe quoi, ou plutôt n'importe quel flottant. Soit
-0.000000, soit un très grand négatif. Certainement un type lu à
l'adresse d'un autre, je n'ai pas enquêté dans le listing asm.
Pour le reste, le long double est en machine sur 80 bits.
Son sizeof fait 8 chez Microsoft, pour des raisons de compatibilté
(après avoir fait plus sur des versions antérieures).
Il fait 12 (donc padding) chez Gcc, pour des raisons soit de
compatibilité, soit d'alignement, je n'en sais rien.
Il me semble qu'il fait (faisait ?) 10 chez Borland.
Si je fais tourner:
long double x = 1.2;
printf("%lun", (unsigned long)sizeof(double));
printf("%lun", (unsigned long)sizeof(long double));
printf("%Lfn", x);
printf("%fn", x);
printf("%Lfn", (double)x);
printf("%fn", (double)x);
J'ai tout bon chez Microsoft, et pas de warning (puisque %Lf accepte
bien sûr aussi bien double que long double)
J'ai un souci pour printf-er des long double.
Quel souci exactement? Erreur à la compilation? Plantage? Perte de
précision?
Affiche n'importe quoi, ou plutôt n'importe quel flottant. Soit
-0.000000, soit un très grand négatif. Certainement un type lu à
l'adresse d'un autre, je n'ai pas enquêté dans le listing asm.
Pour le reste, le long double est en machine sur 80 bits.
Son sizeof fait 8 chez Microsoft, pour des raisons de compatibilté
(après avoir fait plus sur des versions antérieures).
Il fait 12 (donc padding) chez Gcc, pour des raisons soit de
compatibilité, soit d'alignement, je n'en sais rien.
Il me semble qu'il fait (faisait ?) 10 chez Borland.
Si je fais tourner:
long double x = 1.2;
printf("%lun", (unsigned long)sizeof(double));
printf("%lun", (unsigned long)sizeof(long double));
printf("%Lfn", x);
printf("%fn", x);
printf("%Lfn", (double)x);
printf("%fn", (double)x);
J'ai tout bon chez Microsoft, et pas de warning (puisque %Lf accepte
bien sûr aussi bien double que long double)