Un collègue m'a posé une question à laquelle je fus incapable de
répondre : si on suit strictement la norme ISO C90 est-on garanti
d'avoir un programme portable partout ?
Par 'portable partout' j'entends que le programme compilé par n'importe
quel compilateur (respectant la norme) sur n'importe quelle architecture
donne le même résultat (aux erreurs de précision numérique et aux bugs
du compilateur près).
La véritable question est en fait de savoir si la norme est suffisante
ou bien s'il y a des lacunes dedans pour garantir qu'un programme sera
portable.
Si la norme ne suffit pas, pourriez-vous m'indiquer un sous-ensemble de
la norme pouvant garantir la portabilité ?
Un collègue m'a posé une question à laquelle je fus incapable de
répondre : si on suit strictement la norme ISO C90 est-on garanti
d'avoir un programme portable partout ?
Par 'portable partout' j'entends que le programme compilé par n'importe
quel compilateur (respectant la norme) sur n'importe quelle architecture
donne le même résultat (aux erreurs de précision numérique et aux bugs
du compilateur près).
La véritable question est en fait de savoir si la norme est suffisante
ou bien s'il y a des lacunes dedans pour garantir qu'un programme sera
portable.
Si la norme ne suffit pas, pourriez-vous m'indiquer un sous-ensemble de
la norme pouvant garantir la portabilité ?
Un collègue m'a posé une question à laquelle je fus incapable de
répondre : si on suit strictement la norme ISO C90 est-on garanti
d'avoir un programme portable partout ?
Par 'portable partout' j'entends que le programme compilé par n'importe
quel compilateur (respectant la norme) sur n'importe quelle architecture
donne le même résultat (aux erreurs de précision numérique et aux bugs
du compilateur près).
La véritable question est en fait de savoir si la norme est suffisante
ou bien s'il y a des lacunes dedans pour garantir qu'un programme sera
portable.
Si la norme ne suffit pas, pourriez-vous m'indiquer un sous-ensemble de
la norme pouvant garantir la portabilité ?
Un collègue m'a posé une question à laquelle je fus incapable de
répondre : si on suit strictement la norme ISO C90 est-on garanti
d'avoir un programme portable partout ?
Si tu suis strictement la norme, tu ne peux pas faire grand chose,
en particulier aucune entrée-sortie.
Par 'portable partout' j'entends que le programme compilé par
n'importe quel compilateur (respectant la norme) sur n'importe
quelle architecture donne le même résultat (aux erreurs de précision
numérique et aux bugs du compilateur près).
Rares sont les compilateurs respectant la norme et non buggés.
La véritable question est en fait de savoir si la norme est
suffisante ou bien s'il y a des lacunes dedans pour garantir qu'un
programme sera portable.
Pour faire court, disons que la norme ne définit pas tout (cf les
notions de conforme vs strictement conforme, en particulier).
Concernant la portabilité, la norme C définit une machine virtuelle
paramétrée, avec en plus une possibilité de comportement indéfini.
Cela demande donc un effort supplémentaire au programmeur par rapport
à des langages qui spécifieraient absolument tout, indépendamment de
l'architecture (le Java s'y rapproche, par exemple).
Si la norme ne suffit pas, pourriez-vous m'indiquer un sous-ensemble
de la norme pouvant garantir la portabilité ?
Pas grand chose à part
int main(void)
{
return 0;
}
et encore, rien ne dit que l'exécution de ce programme ne provoquera
pas un débordement de pile ou autre dans la pratique.
Un collègue m'a posé une question à laquelle je fus incapable de
répondre : si on suit strictement la norme ISO C90 est-on garanti
d'avoir un programme portable partout ?
Si tu suis strictement la norme, tu ne peux pas faire grand chose,
en particulier aucune entrée-sortie.
Par 'portable partout' j'entends que le programme compilé par
n'importe quel compilateur (respectant la norme) sur n'importe
quelle architecture donne le même résultat (aux erreurs de précision
numérique et aux bugs du compilateur près).
Rares sont les compilateurs respectant la norme et non buggés.
La véritable question est en fait de savoir si la norme est
suffisante ou bien s'il y a des lacunes dedans pour garantir qu'un
programme sera portable.
Pour faire court, disons que la norme ne définit pas tout (cf les
notions de conforme vs strictement conforme, en particulier).
Concernant la portabilité, la norme C définit une machine virtuelle
paramétrée, avec en plus une possibilité de comportement indéfini.
Cela demande donc un effort supplémentaire au programmeur par rapport
à des langages qui spécifieraient absolument tout, indépendamment de
l'architecture (le Java s'y rapproche, par exemple).
Si la norme ne suffit pas, pourriez-vous m'indiquer un sous-ensemble
de la norme pouvant garantir la portabilité ?
Pas grand chose à part
int main(void)
{
return 0;
}
et encore, rien ne dit que l'exécution de ce programme ne provoquera
pas un débordement de pile ou autre dans la pratique.
Un collègue m'a posé une question à laquelle je fus incapable de
répondre : si on suit strictement la norme ISO C90 est-on garanti
d'avoir un programme portable partout ?
Si tu suis strictement la norme, tu ne peux pas faire grand chose,
en particulier aucune entrée-sortie.
Par 'portable partout' j'entends que le programme compilé par
n'importe quel compilateur (respectant la norme) sur n'importe
quelle architecture donne le même résultat (aux erreurs de précision
numérique et aux bugs du compilateur près).
Rares sont les compilateurs respectant la norme et non buggés.
La véritable question est en fait de savoir si la norme est
suffisante ou bien s'il y a des lacunes dedans pour garantir qu'un
programme sera portable.
Pour faire court, disons que la norme ne définit pas tout (cf les
notions de conforme vs strictement conforme, en particulier).
Concernant la portabilité, la norme C définit une machine virtuelle
paramétrée, avec en plus une possibilité de comportement indéfini.
Cela demande donc un effort supplémentaire au programmeur par rapport
à des langages qui spécifieraient absolument tout, indépendamment de
l'architecture (le Java s'y rapproche, par exemple).
Si la norme ne suffit pas, pourriez-vous m'indiquer un sous-ensemble
de la norme pouvant garantir la portabilité ?
Pas grand chose à part
int main(void)
{
return 0;
}
et encore, rien ne dit que l'exécution de ce programme ne provoquera
pas un débordement de pile ou autre dans la pratique.
On Fri, 9 Apr 2004 23:43:11 +0000 (UTC), Vincent LefevreSi tu suis strictement la norme, tu ne peux pas faire grand chose,
en particulier aucune entrée-sortie.
Pour les entrées/sorties on peut fonctionner avec des fichiers textes.
Nos programmes sont essentiellements des programmes effectuant des
calculs mathématiques. Il est facile de vérifier que les données en
entrées rentrent bien dans la norme (entiers bien compris entre -32767
et 32768 par exemple).
Par 'portable partout' j'entends que le programme compilé par
n'importe quel compilateur (respectant la norme) sur n'importe
quelle architecture donne le même résultat (aux erreurs de précision
numérique et aux bugs du compilateur près).
Rares sont les compilateurs respectant la norme et non buggés.
Ah ? est-ce que tu aurais des exemples ? nous utilisons essentiellement
gcc par exemple.
Nous essayons justement d'éviter tout comportement indéfini.
Mais il faut avouer que c'est relativement facile vu que nous ne
réalisons que des programmes avec de faibles entrées/sorties
(essentiellement des entiers/réels via des fichiers textes) et que les
fonctions que nous utilisons sont souvent relativement simples :
- fopen
- malloc
- cos, sin, atan...
- printf
Alors là vous m'inquiétez ! est-il réellement impossible de garantir
qu'un programme plus compliqué sera portable ?
On Fri, 9 Apr 2004 23:43:11 +0000 (UTC), Vincent Lefevre
Si tu suis strictement la norme, tu ne peux pas faire grand chose,
en particulier aucune entrée-sortie.
Pour les entrées/sorties on peut fonctionner avec des fichiers textes.
Nos programmes sont essentiellements des programmes effectuant des
calculs mathématiques. Il est facile de vérifier que les données en
entrées rentrent bien dans la norme (entiers bien compris entre -32767
et 32768 par exemple).
Par 'portable partout' j'entends que le programme compilé par
n'importe quel compilateur (respectant la norme) sur n'importe
quelle architecture donne le même résultat (aux erreurs de précision
numérique et aux bugs du compilateur près).
Rares sont les compilateurs respectant la norme et non buggés.
Ah ? est-ce que tu aurais des exemples ? nous utilisons essentiellement
gcc par exemple.
Nous essayons justement d'éviter tout comportement indéfini.
Mais il faut avouer que c'est relativement facile vu que nous ne
réalisons que des programmes avec de faibles entrées/sorties
(essentiellement des entiers/réels via des fichiers textes) et que les
fonctions que nous utilisons sont souvent relativement simples :
- fopen
- malloc
- cos, sin, atan...
- printf
Alors là vous m'inquiétez ! est-il réellement impossible de garantir
qu'un programme plus compliqué sera portable ?
On Fri, 9 Apr 2004 23:43:11 +0000 (UTC), Vincent LefevreSi tu suis strictement la norme, tu ne peux pas faire grand chose,
en particulier aucune entrée-sortie.
Pour les entrées/sorties on peut fonctionner avec des fichiers textes.
Nos programmes sont essentiellements des programmes effectuant des
calculs mathématiques. Il est facile de vérifier que les données en
entrées rentrent bien dans la norme (entiers bien compris entre -32767
et 32768 par exemple).
Par 'portable partout' j'entends que le programme compilé par
n'importe quel compilateur (respectant la norme) sur n'importe
quelle architecture donne le même résultat (aux erreurs de précision
numérique et aux bugs du compilateur près).
Rares sont les compilateurs respectant la norme et non buggés.
Ah ? est-ce que tu aurais des exemples ? nous utilisons essentiellement
gcc par exemple.
Nous essayons justement d'éviter tout comportement indéfini.
Mais il faut avouer que c'est relativement facile vu que nous ne
réalisons que des programmes avec de faibles entrées/sorties
(essentiellement des entiers/réels via des fichiers textes) et que les
fonctions que nous utilisons sont souvent relativement simples :
- fopen
- malloc
- cos, sin, atan...
- printf
Alors là vous m'inquiétez ! est-il réellement impossible de garantir
qu'un programme plus compliqué sera portable ?
Si tu suis strictement la norme, tu ne peux pas faire grand chose,
en particulier aucune entrée-sortie.
Pour les entrées/sorties on peut fonctionner avec des fichiers
textes.
Même avec les fichiers texte. La norme dit:
[#5] A strictly conforming program shall use only those
features of the language and library specified in this
International Standard.2) It shall not produce output
dependent on any unspecified, undefined, or implementation-
defined behavior, and shall not exceed any minimum
implementation limit.
Or le codage des caractères dépend de l'implémentation (ce n'est pas
forcément à base d'ASCII, tu as des implémentations en EBCDIC, par
exemple).
Par 'portable partout' j'entends que le programme compilé par
n'importe quel compilateur (respectant la norme) sur n'importe
quelle architecture donne le même résultat (aux erreurs de
précision numérique et aux bugs du compilateur près).
Rares sont les compilateurs respectant la norme et non buggés.
Ah ? est-ce que tu aurais des exemples ? nous utilisons
essentiellement gcc par exemple.
Bon, gcc est peut-être censé suivre la norme C90, mais il y a des
bugs. Et n'utilise surtout pas Gnu Pro. :)
Nous essayons justement d'éviter tout comportement indéfini.
Mais il faut avouer que c'est relativement facile vu que nous ne
réalisons que des programmes avec de faibles entrées/sorties
(essentiellement des entiers/réels via des fichiers textes) et que
les fonctions que nous utilisons sont souvent relativement simples :
- fopen
- malloc
- cos, sin, atan...
- printf
Hmm... avec les réels (virgule flottante), tu n'as pas grand chose de
spécifié. L'implémentation peut déclarer suivre la norme IEEE 754
(mais en C99 seulement, je crois). Même avec ça, tu as des bugs liés à
la précision étendue sur certaines archi (e.g. Linux/x86), sauf à
utiliser-ffloat-store. Et rien n'est spécifié concernant les fonctions
transcendantes (cos, sin, atan...). Avec les fonctions génériques de
la glibc (utilisée sur PowerPC, par exemple), si on se place en
arrondi dirigé, on peut même faire planter le programme. :)
printf avec des flottants n'est pas bien spécifié également.
Concernant les flottants, il y a (a eu) pas mal de bugs dans la
glibc. Concernant les bugs que j'ai rapportés:
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug7020
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug3022
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug3548
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug2574
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug!0400
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug!0613
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug!6800
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug"6291
Alors là vous m'inquiétez ! est-il réellement impossible de garantir
qu'un programme plus compliqué sera portable ?
La portabilité est tout relative. En général, on suppose tout de même
que l'implémentation se comporte de manière "raisonnable".
Si tu suis strictement la norme, tu ne peux pas faire grand chose,
en particulier aucune entrée-sortie.
Pour les entrées/sorties on peut fonctionner avec des fichiers
textes.
Même avec les fichiers texte. La norme dit:
[#5] A strictly conforming program shall use only those
features of the language and library specified in this
International Standard.2) It shall not produce output
dependent on any unspecified, undefined, or implementation-
defined behavior, and shall not exceed any minimum
implementation limit.
Or le codage des caractères dépend de l'implémentation (ce n'est pas
forcément à base d'ASCII, tu as des implémentations en EBCDIC, par
exemple).
Par 'portable partout' j'entends que le programme compilé par
n'importe quel compilateur (respectant la norme) sur n'importe
quelle architecture donne le même résultat (aux erreurs de
précision numérique et aux bugs du compilateur près).
Rares sont les compilateurs respectant la norme et non buggés.
Ah ? est-ce que tu aurais des exemples ? nous utilisons
essentiellement gcc par exemple.
Bon, gcc est peut-être censé suivre la norme C90, mais il y a des
bugs. Et n'utilise surtout pas Gnu Pro. :)
Nous essayons justement d'éviter tout comportement indéfini.
Mais il faut avouer que c'est relativement facile vu que nous ne
réalisons que des programmes avec de faibles entrées/sorties
(essentiellement des entiers/réels via des fichiers textes) et que
les fonctions que nous utilisons sont souvent relativement simples :
- fopen
- malloc
- cos, sin, atan...
- printf
Hmm... avec les réels (virgule flottante), tu n'as pas grand chose de
spécifié. L'implémentation peut déclarer suivre la norme IEEE 754
(mais en C99 seulement, je crois). Même avec ça, tu as des bugs liés à
la précision étendue sur certaines archi (e.g. Linux/x86), sauf à
utiliser-ffloat-store. Et rien n'est spécifié concernant les fonctions
transcendantes (cos, sin, atan...). Avec les fonctions génériques de
la glibc (utilisée sur PowerPC, par exemple), si on se place en
arrondi dirigé, on peut même faire planter le programme. :)
printf avec des flottants n'est pas bien spécifié également.
Concernant les flottants, il y a (a eu) pas mal de bugs dans la
glibc. Concernant les bugs que j'ai rapportés:
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug7020
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug3022
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug3548
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug2574
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug!0400
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug!0613
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug!6800
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug"6291
Alors là vous m'inquiétez ! est-il réellement impossible de garantir
qu'un programme plus compliqué sera portable ?
La portabilité est tout relative. En général, on suppose tout de même
que l'implémentation se comporte de manière "raisonnable".
Si tu suis strictement la norme, tu ne peux pas faire grand chose,
en particulier aucune entrée-sortie.
Pour les entrées/sorties on peut fonctionner avec des fichiers
textes.
Même avec les fichiers texte. La norme dit:
[#5] A strictly conforming program shall use only those
features of the language and library specified in this
International Standard.2) It shall not produce output
dependent on any unspecified, undefined, or implementation-
defined behavior, and shall not exceed any minimum
implementation limit.
Or le codage des caractères dépend de l'implémentation (ce n'est pas
forcément à base d'ASCII, tu as des implémentations en EBCDIC, par
exemple).
Par 'portable partout' j'entends que le programme compilé par
n'importe quel compilateur (respectant la norme) sur n'importe
quelle architecture donne le même résultat (aux erreurs de
précision numérique et aux bugs du compilateur près).
Rares sont les compilateurs respectant la norme et non buggés.
Ah ? est-ce que tu aurais des exemples ? nous utilisons
essentiellement gcc par exemple.
Bon, gcc est peut-être censé suivre la norme C90, mais il y a des
bugs. Et n'utilise surtout pas Gnu Pro. :)
Nous essayons justement d'éviter tout comportement indéfini.
Mais il faut avouer que c'est relativement facile vu que nous ne
réalisons que des programmes avec de faibles entrées/sorties
(essentiellement des entiers/réels via des fichiers textes) et que
les fonctions que nous utilisons sont souvent relativement simples :
- fopen
- malloc
- cos, sin, atan...
- printf
Hmm... avec les réels (virgule flottante), tu n'as pas grand chose de
spécifié. L'implémentation peut déclarer suivre la norme IEEE 754
(mais en C99 seulement, je crois). Même avec ça, tu as des bugs liés à
la précision étendue sur certaines archi (e.g. Linux/x86), sauf à
utiliser-ffloat-store. Et rien n'est spécifié concernant les fonctions
transcendantes (cos, sin, atan...). Avec les fonctions génériques de
la glibc (utilisée sur PowerPC, par exemple), si on se place en
arrondi dirigé, on peut même faire planter le programme. :)
printf avec des flottants n'est pas bien spécifié également.
Concernant les flottants, il y a (a eu) pas mal de bugs dans la
glibc. Concernant les bugs que j'ai rapportés:
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug7020
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug3022
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug3548
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug2574
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug!0400
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug!0613
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug!6800
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug"6291
Alors là vous m'inquiétez ! est-il réellement impossible de garantir
qu'un programme plus compliqué sera portable ?
La portabilité est tout relative. En général, on suppose tout de même
que l'implémentation se comporte de manière "raisonnable".
Bonjour,
Un collègue m'a posé une question à laquelle je fus incapable de
répondre : si on suit strictement la norme ISO C90 est-on garanti
d'avoir un programme portable partout ?
Par 'portable partout' j'entends que le programme compilé par n'importe
quel compilateur (respectant la norme) sur n'importe quelle architecture
donne le même résultat (aux erreurs de précision numérique et aux bugs
du compilateur près).
La véritable question est en fait de savoir si la norme est suffisante
ou bien s'il y a des lacunes dedans pour garantir qu'un programme sera
portable.
Bonjour,
Un collègue m'a posé une question à laquelle je fus incapable de
répondre : si on suit strictement la norme ISO C90 est-on garanti
d'avoir un programme portable partout ?
Par 'portable partout' j'entends que le programme compilé par n'importe
quel compilateur (respectant la norme) sur n'importe quelle architecture
donne le même résultat (aux erreurs de précision numérique et aux bugs
du compilateur près).
La véritable question est en fait de savoir si la norme est suffisante
ou bien s'il y a des lacunes dedans pour garantir qu'un programme sera
portable.
Bonjour,
Un collègue m'a posé une question à laquelle je fus incapable de
répondre : si on suit strictement la norme ISO C90 est-on garanti
d'avoir un programme portable partout ?
Par 'portable partout' j'entends que le programme compilé par n'importe
quel compilateur (respectant la norme) sur n'importe quelle architecture
donne le même résultat (aux erreurs de précision numérique et aux bugs
du compilateur près).
La véritable question est en fait de savoir si la norme est suffisante
ou bien s'il y a des lacunes dedans pour garantir qu'un programme sera
portable.
Un collègue m'a posé une question à laquelle je fus incapable de
répondre : si on suit strictement la norme ISO C90 est-on garanti
d'avoir un programme portable partout ?
Par 'portable partout' j'entends que le programme compilé par n'importe
quel compilateur (respectant la norme) sur n'importe quelle architecture
donne le même résultat (aux erreurs de précision numérique et aux bugs
du compilateur près).
La véritable question est en fait de savoir si la norme est suffisante
ou bien s'il y a des lacunes dedans pour garantir qu'un programme sera
portable.
Si la norme ne suffit pas, pourriez-vous m'indiquer un sous-ensemble de
la norme pouvant garantir la portabilité ?
Un collègue m'a posé une question à laquelle je fus incapable de
répondre : si on suit strictement la norme ISO C90 est-on garanti
d'avoir un programme portable partout ?
Par 'portable partout' j'entends que le programme compilé par n'importe
quel compilateur (respectant la norme) sur n'importe quelle architecture
donne le même résultat (aux erreurs de précision numérique et aux bugs
du compilateur près).
La véritable question est en fait de savoir si la norme est suffisante
ou bien s'il y a des lacunes dedans pour garantir qu'un programme sera
portable.
Si la norme ne suffit pas, pourriez-vous m'indiquer un sous-ensemble de
la norme pouvant garantir la portabilité ?
Un collègue m'a posé une question à laquelle je fus incapable de
répondre : si on suit strictement la norme ISO C90 est-on garanti
d'avoir un programme portable partout ?
Par 'portable partout' j'entends que le programme compilé par n'importe
quel compilateur (respectant la norme) sur n'importe quelle architecture
donne le même résultat (aux erreurs de précision numérique et aux bugs
du compilateur près).
La véritable question est en fait de savoir si la norme est suffisante
ou bien s'il y a des lacunes dedans pour garantir qu'un programme sera
portable.
Si la norme ne suffit pas, pourriez-vous m'indiquer un sous-ensemble de
la norme pouvant garantir la portabilité ?
Si tu suis strictement la norme, tu ne peux pas faire grand chose,
en particulier aucune entrée-sortie.
Si tu suis strictement la norme, tu ne peux pas faire grand chose,
en particulier aucune entrée-sortie.
Si tu suis strictement la norme, tu ne peux pas faire grand chose,
en particulier aucune entrée-sortie.
et encore, rien ne dit que l'exécution de ce programme ne provoquera
pas un débordement de pile ou autre dans la pratique.
Alors là vous m'inquiétez ! est-il réellement impossible de garantir
qu'un programme plus compliqué sera portable ?
et encore, rien ne dit que l'exécution de ce programme ne provoquera
pas un débordement de pile ou autre dans la pratique.
Alors là vous m'inquiétez ! est-il réellement impossible de garantir
qu'un programme plus compliqué sera portable ?
et encore, rien ne dit que l'exécution de ce programme ne provoquera
pas un débordement de pile ou autre dans la pratique.
Alors là vous m'inquiétez ! est-il réellement impossible de garantir
qu'un programme plus compliqué sera portable ?
On Sat, 10 Apr 2004 00:34:21 +0000 (UTC), Vincent LefevreHmm... avec les réels (virgule flottante), tu n'as pas grand chose de
spécifié. L'implémentation peut déclarer suivre la norme IEEE 754
(mais en C99 seulement, je crois). Même avec ça, tu as des bugs liés à
la précision étendue sur certaines archi (e.g. Linux/x86), sauf à
utiliser-ffloat-store. Et rien n'est spécifié concernant les fonctions
transcendantes (cos, sin, atan...). Avec les fonctions génériques de
la glibc (utilisée sur PowerPC, par exemple), si on se place en
arrondi dirigé, on peut même faire planter le programme. :)
Je ne suis pas sûr de comprendre, est-ce que tout cela n'est pas lié aux
erreurs de précision numérique et aux bugs du compilateur ?
Si j'utilise la fonction cosinus sur un réel quelconque (en respectant
les limites d'un double), n'aurais-je pas le même résultat partout (aux
erreurs de précision près) ?
printf avec des flottants n'est pas bien spécifié également.
Pareil, si je fais un printf("%1.15en", 123.456) est-ce que je n'aurais
pas le même résultat partout aux erreurs d'arrondi près ? (hormis les
problèmes de codage de caractères ! j'avais oublié ça...)
La portabilité est tout relative. En général, on suppose tout de même
que l'implémentation se comporte de manière "raisonnable".
Bon du coup je suis un peu perdu là (il est grand temps d'aller dormir
!), que dois-je répondre à mon collègue ?
- "Un programme codé en ISO C90 est-il portable ?"
On Sat, 10 Apr 2004 00:34:21 +0000 (UTC), Vincent Lefevre
Hmm... avec les réels (virgule flottante), tu n'as pas grand chose de
spécifié. L'implémentation peut déclarer suivre la norme IEEE 754
(mais en C99 seulement, je crois). Même avec ça, tu as des bugs liés à
la précision étendue sur certaines archi (e.g. Linux/x86), sauf à
utiliser-ffloat-store. Et rien n'est spécifié concernant les fonctions
transcendantes (cos, sin, atan...). Avec les fonctions génériques de
la glibc (utilisée sur PowerPC, par exemple), si on se place en
arrondi dirigé, on peut même faire planter le programme. :)
Je ne suis pas sûr de comprendre, est-ce que tout cela n'est pas lié aux
erreurs de précision numérique et aux bugs du compilateur ?
Si j'utilise la fonction cosinus sur un réel quelconque (en respectant
les limites d'un double), n'aurais-je pas le même résultat partout (aux
erreurs de précision près) ?
printf avec des flottants n'est pas bien spécifié également.
Pareil, si je fais un printf("%1.15en", 123.456) est-ce que je n'aurais
pas le même résultat partout aux erreurs d'arrondi près ? (hormis les
problèmes de codage de caractères ! j'avais oublié ça...)
La portabilité est tout relative. En général, on suppose tout de même
que l'implémentation se comporte de manière "raisonnable".
Bon du coup je suis un peu perdu là (il est grand temps d'aller dormir
!), que dois-je répondre à mon collègue ?
- "Un programme codé en ISO C90 est-il portable ?"
On Sat, 10 Apr 2004 00:34:21 +0000 (UTC), Vincent LefevreHmm... avec les réels (virgule flottante), tu n'as pas grand chose de
spécifié. L'implémentation peut déclarer suivre la norme IEEE 754
(mais en C99 seulement, je crois). Même avec ça, tu as des bugs liés à
la précision étendue sur certaines archi (e.g. Linux/x86), sauf à
utiliser-ffloat-store. Et rien n'est spécifié concernant les fonctions
transcendantes (cos, sin, atan...). Avec les fonctions génériques de
la glibc (utilisée sur PowerPC, par exemple), si on se place en
arrondi dirigé, on peut même faire planter le programme. :)
Je ne suis pas sûr de comprendre, est-ce que tout cela n'est pas lié aux
erreurs de précision numérique et aux bugs du compilateur ?
Si j'utilise la fonction cosinus sur un réel quelconque (en respectant
les limites d'un double), n'aurais-je pas le même résultat partout (aux
erreurs de précision près) ?
printf avec des flottants n'est pas bien spécifié également.
Pareil, si je fais un printf("%1.15en", 123.456) est-ce que je n'aurais
pas le même résultat partout aux erreurs d'arrondi près ? (hormis les
problèmes de codage de caractères ! j'avais oublié ça...)
La portabilité est tout relative. En général, on suppose tout de même
que l'implémentation se comporte de manière "raisonnable".
Bon du coup je suis un peu perdu là (il est grand temps d'aller dormir
!), que dois-je répondre à mon collègue ?
- "Un programme codé en ISO C90 est-il portable ?"
In 'fr.comp.lang.c', Vincent Lefevre <vincent+ wrote:Si tu suis strictement la norme, tu ne peux pas faire grand chose,
en particulier aucune entrée-sortie.
Ah? On a retiré <stdio.h> de la norme? Je ne savais pas.
In 'fr.comp.lang.c', Vincent Lefevre <vincent+news@vinc17.org> wrote:
Si tu suis strictement la norme, tu ne peux pas faire grand chose,
en particulier aucune entrée-sortie.
Ah? On a retiré <stdio.h> de la norme? Je ne savais pas.
In 'fr.comp.lang.c', Vincent Lefevre <vincent+ wrote:Si tu suis strictement la norme, tu ne peux pas faire grand chose,
en particulier aucune entrée-sortie.
Ah? On a retiré <stdio.h> de la norme? Je ne savais pas.