D'où l'intéret de ASN.1 ou XML
Bien qu'il soit à la mode, je ne suis pas du tout convaincu de l'intérêt
technique de faire un encodage dans un format textuel.
D'où l'intéret de ASN.1 ou XML
Bien qu'il soit à la mode, je ne suis pas du tout convaincu de l'intérêt
technique de faire un encodage dans un format textuel.
D'où l'intéret de ASN.1 ou XML
Bien qu'il soit à la mode, je ne suis pas du tout convaincu de l'intérêt
technique de faire un encodage dans un format textuel.
Bien qu'il soit à la mode, je ne suis pas du tout convaincu de l'intérêt
technique de faire un encodage dans un format textuel.
Alors regarde ASN.1 ;-)
Est-ce un successeur ou un remplaçant des XDR ?
http://mutah.free.fr/life_for_living.mp3 <<<<<<<<<<<<<<<<<
Bien qu'il soit à la mode, je ne suis pas du tout convaincu de l'intérêt
technique de faire un encodage dans un format textuel.
Alors regarde ASN.1 ;-)
Est-ce un successeur ou un remplaçant des XDR ?
http://mutah.free.fr/life_for_living.mp3 <<<<<<<<<<<<<<<<<
Bien qu'il soit à la mode, je ne suis pas du tout convaincu de l'intérêt
technique de faire un encodage dans un format textuel.
Alors regarde ASN.1 ;-)
Est-ce un successeur ou un remplaçant des XDR ?
http://mutah.free.fr/life_for_living.mp3 <<<<<<<<<<<<<<<<<
Bien qu'il soit à la mode, je ne suis pas du tout convaincu de l'intérêt
technique de faire un encodage dans un format textuel.
Notamment, le parsing à la réception est généralement écrit avec des moteurs
à objets qui moulinent du malloc et des copies de buffer à n'en plus finir,
donc du point de vue des performances, c'est catastrophique tant pour la
transmission que pour la manipulation.
Un encodage textuel ne présente que deux intérêts:
- être humainement lisible, ce qui implique une indentation correcte et donc
rajoute du poids. Si on doit régénérer une forme lisible à partir d'une
forme compacte, nul besoin que celle-ci utilise le même encodage,
- si on peut se limiter au jeu de caractères ASCII, donc encodés sur 8 bits,
le texte ne pose pas de problèmes d'endianness. Mais les caractères
exotiques (de plus en plus fréquents) doivent être encodés en &entities; ou
autres E ce qui peut vite faire lourd, et je ne parle pas des pointeurs,
transformés en liens vers des balises...
Et bien je pense que compiler une forme structurée en une forme binaire
portable (sans pointeurs sortants) à endianness connue représente une énorme
optimisation dans l'objectif énoncé qui est de communiquer des données sur
un réseau. Même si l'une des stations a la malchance d'être du mauvais sexe,
retourner systématiquement tous les champs binaires coutera toujours moins
cher que la rédaction et le parsing du langage textuel.
Quel que soit l'encodage choisi, c'est ce travail d'analyse qui n'est pas
simple du tout à réaliser, mais il est inévitable dès lors qu'on doit
sérialiser une structure, qu'il s'agisse de la transmettre sur le réseau ou
de l'écrire sur un média.
Bien qu'il soit à la mode, je ne suis pas du tout convaincu de l'intérêt
technique de faire un encodage dans un format textuel.
Notamment, le parsing à la réception est généralement écrit avec des moteurs
à objets qui moulinent du malloc et des copies de buffer à n'en plus finir,
donc du point de vue des performances, c'est catastrophique tant pour la
transmission que pour la manipulation.
Un encodage textuel ne présente que deux intérêts:
- être humainement lisible, ce qui implique une indentation correcte et donc
rajoute du poids. Si on doit régénérer une forme lisible à partir d'une
forme compacte, nul besoin que celle-ci utilise le même encodage,
- si on peut se limiter au jeu de caractères ASCII, donc encodés sur 8 bits,
le texte ne pose pas de problèmes d'endianness. Mais les caractères
exotiques (de plus en plus fréquents) doivent être encodés en &entities; ou
autres E ce qui peut vite faire lourd, et je ne parle pas des pointeurs,
transformés en liens vers des balises...
Et bien je pense que compiler une forme structurée en une forme binaire
portable (sans pointeurs sortants) à endianness connue représente une énorme
optimisation dans l'objectif énoncé qui est de communiquer des données sur
un réseau. Même si l'une des stations a la malchance d'être du mauvais sexe,
retourner systématiquement tous les champs binaires coutera toujours moins
cher que la rédaction et le parsing du langage textuel.
Quel que soit l'encodage choisi, c'est ce travail d'analyse qui n'est pas
simple du tout à réaliser, mais il est inévitable dès lors qu'on doit
sérialiser une structure, qu'il s'agisse de la transmettre sur le réseau ou
de l'écrire sur un média.
Bien qu'il soit à la mode, je ne suis pas du tout convaincu de l'intérêt
technique de faire un encodage dans un format textuel.
Notamment, le parsing à la réception est généralement écrit avec des moteurs
à objets qui moulinent du malloc et des copies de buffer à n'en plus finir,
donc du point de vue des performances, c'est catastrophique tant pour la
transmission que pour la manipulation.
Un encodage textuel ne présente que deux intérêts:
- être humainement lisible, ce qui implique une indentation correcte et donc
rajoute du poids. Si on doit régénérer une forme lisible à partir d'une
forme compacte, nul besoin que celle-ci utilise le même encodage,
- si on peut se limiter au jeu de caractères ASCII, donc encodés sur 8 bits,
le texte ne pose pas de problèmes d'endianness. Mais les caractères
exotiques (de plus en plus fréquents) doivent être encodés en &entities; ou
autres E ce qui peut vite faire lourd, et je ne parle pas des pointeurs,
transformés en liens vers des balises...
Et bien je pense que compiler une forme structurée en une forme binaire
portable (sans pointeurs sortants) à endianness connue représente une énorme
optimisation dans l'objectif énoncé qui est de communiquer des données sur
un réseau. Même si l'une des stations a la malchance d'être du mauvais sexe,
retourner systématiquement tous les champs binaires coutera toujours moins
cher que la rédaction et le parsing du langage textuel.
Quel que soit l'encodage choisi, c'est ce travail d'analyse qui n'est pas
simple du tout à réaliser, mais il est inévitable dès lors qu'on doit
sérialiser une structure, qu'il s'agisse de la transmettre sur le réseau ou
de l'écrire sur un média.
On 25 sep, 12:19, none <""vb"@(none)"> wrote:Bonjour,
Créer une communication réseaux via les appel systèmes ne pose
généralement aucun soucis, ceci quelquel soit l'OS utilisé. Les données
alors transmise sont au préalable mise dans un buffer.
La question que je me pose depuis que je fait ce genre de manipulation,
c'est comment faites-vous pour transmettre le contenu d'une structure ?
Surtout lorsque celle-ci possède des pointeurs sur autre structure ou
tableau de char.
Ce que je fait depuis longtemps, c'est un construction d'une chaine pour
transmettre les informations. Mais il faut que je modifie cette
construction de chaine chaque fois que je modifie la structure,
nécessitant également le décodage de l'autre coté.
Donc la question est simple, avez-vous une méthode différente pour
transmettre le contenu d'une structure? Y compris lorsque elle est
chainées?
Merci pour vos commentaires.
Vincent
Je ne suis pas sur de comprendre ce que tu veux dire par "une
construction de chaine pour transmettre ". Pour
une variable x, il te suffit d'envoyer
sendto( sd , &x, sizeof(x)) , .. , .. , ..);
ne s'agit pas d'une probemetique de type reseau
Tu as exactement la meme problematique quand
tu transmets tes donnees via un disque..
On 25 sep, 12:19, none <""vb"@(none)"> wrote:
Bonjour,
Créer une communication réseaux via les appel systèmes ne pose
généralement aucun soucis, ceci quelquel soit l'OS utilisé. Les données
alors transmise sont au préalable mise dans un buffer.
La question que je me pose depuis que je fait ce genre de manipulation,
c'est comment faites-vous pour transmettre le contenu d'une structure ?
Surtout lorsque celle-ci possède des pointeurs sur autre structure ou
tableau de char.
Ce que je fait depuis longtemps, c'est un construction d'une chaine pour
transmettre les informations. Mais il faut que je modifie cette
construction de chaine chaque fois que je modifie la structure,
nécessitant également le décodage de l'autre coté.
Donc la question est simple, avez-vous une méthode différente pour
transmettre le contenu d'une structure? Y compris lorsque elle est
chainées?
Merci pour vos commentaires.
Vincent
Je ne suis pas sur de comprendre ce que tu veux dire par "une
construction de chaine pour transmettre ". Pour
une variable x, il te suffit d'envoyer
sendto( sd , &x, sizeof(x)) , .. , .. , ..);
ne s'agit pas d'une probemetique de type reseau
Tu as exactement la meme problematique quand
tu transmets tes donnees via un disque..
On 25 sep, 12:19, none <""vb"@(none)"> wrote:Bonjour,
Créer une communication réseaux via les appel systèmes ne pose
généralement aucun soucis, ceci quelquel soit l'OS utilisé. Les données
alors transmise sont au préalable mise dans un buffer.
La question que je me pose depuis que je fait ce genre de manipulation,
c'est comment faites-vous pour transmettre le contenu d'une structure ?
Surtout lorsque celle-ci possède des pointeurs sur autre structure ou
tableau de char.
Ce que je fait depuis longtemps, c'est un construction d'une chaine pour
transmettre les informations. Mais il faut que je modifie cette
construction de chaine chaque fois que je modifie la structure,
nécessitant également le décodage de l'autre coté.
Donc la question est simple, avez-vous une méthode différente pour
transmettre le contenu d'une structure? Y compris lorsque elle est
chainées?
Merci pour vos commentaires.
Vincent
Je ne suis pas sur de comprendre ce que tu veux dire par "une
construction de chaine pour transmettre ". Pour
une variable x, il te suffit d'envoyer
sendto( sd , &x, sizeof(x)) , .. , .. , ..);
ne s'agit pas d'une probemetique de type reseau
Tu as exactement la meme problematique quand
tu transmets tes donnees via un disque..
Ce que je fait depuis longtemps, c'est un construction d'une chaine
pour transmettre les informations.
Je ne suis pas sur de comprendre ce que tu veux dire par "une
construction de chaine pour transmettre ".
Tu as exactement la meme problematique quand
tu transmets tes donnees via un disque..
Ce que je fait depuis longtemps, c'est un construction d'une chaine
pour transmettre les informations.
Je ne suis pas sur de comprendre ce que tu veux dire par "une
construction de chaine pour transmettre ".
Tu as exactement la meme problematique quand
tu transmets tes donnees via un disque..
Ce que je fait depuis longtemps, c'est un construction d'une chaine
pour transmettre les informations.
Je ne suis pas sur de comprendre ce que tu veux dire par "une
construction de chaine pour transmettre ".
Tu as exactement la meme problematique quand
tu transmets tes donnees via un disque..
L'encodage textuel a aussi l'avantage d'etre une représentation
univoque des entiers et flottants.
On 2007-09-30, Patrick 'Zener' Brunet wrote:Notamment, le parsing à la réception est généralement écrit avec des
moteurs à objets [...] c'est catastrophique tant pour la
transmission que pour la manipulation.
Même si l'une des stations a
la malchance d'être du mauvais sexe, retourner systématiquement tous
les champs binaires coutera toujours moins cher que la rédaction et
le parsing du langage textuel.
L'encodage textuel a aussi l'avantage d'etre une représentation
univoque des entiers et flottants.
On 2007-09-30, Patrick 'Zener' Brunet wrote:
Notamment, le parsing à la réception est généralement écrit avec des
moteurs à objets [...] c'est catastrophique tant pour la
transmission que pour la manipulation.
Même si l'une des stations a
la malchance d'être du mauvais sexe, retourner systématiquement tous
les champs binaires coutera toujours moins cher que la rédaction et
le parsing du langage textuel.
L'encodage textuel a aussi l'avantage d'etre une représentation
univoque des entiers et flottants.
On 2007-09-30, Patrick 'Zener' Brunet wrote:Notamment, le parsing à la réception est généralement écrit avec des
moteurs à objets [...] c'est catastrophique tant pour la
transmission que pour la manipulation.
Même si l'une des stations a
la malchance d'être du mauvais sexe, retourner systématiquement tous
les champs binaires coutera toujours moins cher que la rédaction et
le parsing du langage textuel.
En news:,
Marc Boyer va escriure:L'encodage textuel a aussi l'avantage d'etre une représentation
univoque des entiers et flottants.
Oui pour les entiers, pas vraiment d'accord pour les flottants (sauf si tu
utilises la même base ou une puissance de celle-ci pour les deux formes,
textuelle et binaire). Même si C99 a rajouté DECIMAL_DIG, peu de gens savent
l'utiliser à bon escient ; exemple, cf.
http://www.dinkumware.com/manuals/?page=float.html.
Qui plus est, il suffit de passer paranoia.c pour voir que la lecture et
l'écriture des flottants est un domaine toujours intéressant de la chasse
aux bogues...
En news:slrnfg1d9l.6bd.Marc.Boyer@ubu.enseeiht.fr,
Marc Boyer va escriure:
L'encodage textuel a aussi l'avantage d'etre une représentation
univoque des entiers et flottants.
Oui pour les entiers, pas vraiment d'accord pour les flottants (sauf si tu
utilises la même base ou une puissance de celle-ci pour les deux formes,
textuelle et binaire). Même si C99 a rajouté DECIMAL_DIG, peu de gens savent
l'utiliser à bon escient ; exemple, cf.
http://www.dinkumware.com/manuals/?page=float.html.
Qui plus est, il suffit de passer paranoia.c pour voir que la lecture et
l'écriture des flottants est un domaine toujours intéressant de la chasse
aux bogues...
En news:,
Marc Boyer va escriure:L'encodage textuel a aussi l'avantage d'etre une représentation
univoque des entiers et flottants.
Oui pour les entiers, pas vraiment d'accord pour les flottants (sauf si tu
utilises la même base ou une puissance de celle-ci pour les deux formes,
textuelle et binaire). Même si C99 a rajouté DECIMAL_DIG, peu de gens savent
l'utiliser à bon escient ; exemple, cf.
http://www.dinkumware.com/manuals/?page=float.html.
Qui plus est, il suffit de passer paranoia.c pour voir que la lecture et
l'écriture des flottants est un domaine toujours intéressant de la chasse
aux bogues...
On 2007-10-01, Antoine Leca wrote:En news:,
Marc Boyer va escriure:L'encodage textuel a aussi l'avantage d'etre une représentation
univoque des entiers et flottants.
Oui pour les entiers, pas vraiment d'accord pour les flottants (sauf
si tu utilises la même base ou une puissance de celle-ci pour les
deux formes, textuelle et binaire). Même si C99 a rajouté
DECIMAL_DIG, peu de gens savent l'utiliser à bon escient ; exemple,
cf. http://www.dinkumware.com/manuals/?page=float.html.
J'ai dit "représentation univoque", pas représentation portable.
La nuance pour moi est qu'en choisissant le format d'affichage,
tu choisis le nombre de digits que tu veux communiquer/stocker.
Après, oui, si ton archi en propose plus ou moins, tu y perds.
Qui plus est, il suffit de passer paranoia.c pour voir que la
lecture et l'écriture des flottants est un domaine toujours
intéressant de la chasse aux bogues...
paranoia.c ?
D'après Google, c'est un code de Richard Karpinski & Kahan
qui teste les résultats de calculs. Je n'ai pas vu qu'il teste les I/O
(mais j'ai peut être regardé trop vite).
On 2007-10-01, Antoine Leca <root@localhost.invalid> wrote:
En news:slrnfg1d9l.6bd.Marc.Boyer@ubu.enseeiht.fr,
Marc Boyer va escriure:
L'encodage textuel a aussi l'avantage d'etre une représentation
univoque des entiers et flottants.
Oui pour les entiers, pas vraiment d'accord pour les flottants (sauf
si tu utilises la même base ou une puissance de celle-ci pour les
deux formes, textuelle et binaire). Même si C99 a rajouté
DECIMAL_DIG, peu de gens savent l'utiliser à bon escient ; exemple,
cf. http://www.dinkumware.com/manuals/?page=float.html.
J'ai dit "représentation univoque", pas représentation portable.
La nuance pour moi est qu'en choisissant le format d'affichage,
tu choisis le nombre de digits que tu veux communiquer/stocker.
Après, oui, si ton archi en propose plus ou moins, tu y perds.
Qui plus est, il suffit de passer paranoia.c pour voir que la
lecture et l'écriture des flottants est un domaine toujours
intéressant de la chasse aux bogues...
paranoia.c ?
D'après Google, c'est un code de Richard Karpinski & Kahan
qui teste les résultats de calculs. Je n'ai pas vu qu'il teste les I/O
(mais j'ai peut être regardé trop vite).
On 2007-10-01, Antoine Leca wrote:En news:,
Marc Boyer va escriure:L'encodage textuel a aussi l'avantage d'etre une représentation
univoque des entiers et flottants.
Oui pour les entiers, pas vraiment d'accord pour les flottants (sauf
si tu utilises la même base ou une puissance de celle-ci pour les
deux formes, textuelle et binaire). Même si C99 a rajouté
DECIMAL_DIG, peu de gens savent l'utiliser à bon escient ; exemple,
cf. http://www.dinkumware.com/manuals/?page=float.html.
J'ai dit "représentation univoque", pas représentation portable.
La nuance pour moi est qu'en choisissant le format d'affichage,
tu choisis le nombre de digits que tu veux communiquer/stocker.
Après, oui, si ton archi en propose plus ou moins, tu y perds.
Qui plus est, il suffit de passer paranoia.c pour voir que la
lecture et l'écriture des flottants est un domaine toujours
intéressant de la chasse aux bogues...
paranoia.c ?
D'après Google, c'est un code de Richard Karpinski & Kahan
qui teste les résultats de calculs. Je n'ai pas vu qu'il teste les I/O
(mais j'ai peut être regardé trop vite).
En news:, Marc Boyer va escriure:On 2007-10-01, Antoine Leca wrote:En news:,
Marc Boyer va escriure:L'encodage textuel a aussi l'avantage d'etre une représentation
univoque des entiers et flottants.
Oui pour les entiers, pas vraiment d'accord pour les flottants (sauf
si tu utilises la même base ou une puissance de celle-ci pour les
deux formes, textuelle et binaire). Même si C99 a rajouté
DECIMAL_DIG, peu de gens savent l'utiliser à bon escient ; exemple,
cf. http://www.dinkumware.com/manuals/?page=float.html.
J'ai dit "représentation univoque", pas représentation portable.
Certes. Au temps pour moi, j'avais lu « injection » (que je définirais
comme
la faculté de pouvoir revenir à un et un seul nombre flottant étant donnée
une représentation textuelle intermédiaire), et il est exact que tu n'as
pas
écrit cela.
Dans le langage courant, la notion d'univoque est souvent utilisée à tort
à
la place de celle de bijection (en fait bi-univoque) ; il est évident que
la
relation entre l'ensemble (fini) des nombres flottants représentables (une
fois données la taille de la mantisse et de l'exposant) vers l'ensemble
(infini) des représentations textuelles des nombres décimaux, ne peut pas
être une bijection ; c'est pourquoi j'étais descendu d'un cran, et m'étais
arrêté aux injections, qui me semble être une utilisation intéressante
dans
le cadre en question (possibilité de revenir aux données d'origine).
Mais avec les nombres flottants, cette propriété d'injectivité est
difficile
à obtenir dans la pratique. En général, les problèmes se situent à la
relecture, donc en dehors du cadre de la "représentation univoque" (qui ne
concerne que la partie écriture de la transmission).
En news:slrnfg4ccf.6dp.Marc.Boyer@ubu.enseeiht.fr, Marc Boyer va escriure:
On 2007-10-01, Antoine Leca <root@localhost.invalid> wrote:
En news:slrnfg1d9l.6bd.Marc.Boyer@ubu.enseeiht.fr,
Marc Boyer va escriure:
L'encodage textuel a aussi l'avantage d'etre une représentation
univoque des entiers et flottants.
Oui pour les entiers, pas vraiment d'accord pour les flottants (sauf
si tu utilises la même base ou une puissance de celle-ci pour les
deux formes, textuelle et binaire). Même si C99 a rajouté
DECIMAL_DIG, peu de gens savent l'utiliser à bon escient ; exemple,
cf. http://www.dinkumware.com/manuals/?page=float.html.
J'ai dit "représentation univoque", pas représentation portable.
Certes. Au temps pour moi, j'avais lu « injection » (que je définirais
comme
la faculté de pouvoir revenir à un et un seul nombre flottant étant donnée
une représentation textuelle intermédiaire), et il est exact que tu n'as
pas
écrit cela.
Dans le langage courant, la notion d'univoque est souvent utilisée à tort
à
la place de celle de bijection (en fait bi-univoque) ; il est évident que
la
relation entre l'ensemble (fini) des nombres flottants représentables (une
fois données la taille de la mantisse et de l'exposant) vers l'ensemble
(infini) des représentations textuelles des nombres décimaux, ne peut pas
être une bijection ; c'est pourquoi j'étais descendu d'un cran, et m'étais
arrêté aux injections, qui me semble être une utilisation intéressante
dans
le cadre en question (possibilité de revenir aux données d'origine).
Mais avec les nombres flottants, cette propriété d'injectivité est
difficile
à obtenir dans la pratique. En général, les problèmes se situent à la
relecture, donc en dehors du cadre de la "représentation univoque" (qui ne
concerne que la partie écriture de la transmission).
En news:, Marc Boyer va escriure:On 2007-10-01, Antoine Leca wrote:En news:,
Marc Boyer va escriure:L'encodage textuel a aussi l'avantage d'etre une représentation
univoque des entiers et flottants.
Oui pour les entiers, pas vraiment d'accord pour les flottants (sauf
si tu utilises la même base ou une puissance de celle-ci pour les
deux formes, textuelle et binaire). Même si C99 a rajouté
DECIMAL_DIG, peu de gens savent l'utiliser à bon escient ; exemple,
cf. http://www.dinkumware.com/manuals/?page=float.html.
J'ai dit "représentation univoque", pas représentation portable.
Certes. Au temps pour moi, j'avais lu « injection » (que je définirais
comme
la faculté de pouvoir revenir à un et un seul nombre flottant étant donnée
une représentation textuelle intermédiaire), et il est exact que tu n'as
pas
écrit cela.
Dans le langage courant, la notion d'univoque est souvent utilisée à tort
à
la place de celle de bijection (en fait bi-univoque) ; il est évident que
la
relation entre l'ensemble (fini) des nombres flottants représentables (une
fois données la taille de la mantisse et de l'exposant) vers l'ensemble
(infini) des représentations textuelles des nombres décimaux, ne peut pas
être une bijection ; c'est pourquoi j'étais descendu d'un cran, et m'étais
arrêté aux injections, qui me semble être une utilisation intéressante
dans
le cadre en question (possibilité de revenir aux données d'origine).
Mais avec les nombres flottants, cette propriété d'injectivité est
difficile
à obtenir dans la pratique. En général, les problèmes se situent à la
relecture, donc en dehors du cadre de la "représentation univoque" (qui ne
concerne que la partie écriture de la transmission).
En news:, Marc Boyer va escriure:On 2007-10-01, Antoine Leca wrote:En news:,
Marc Boyer va escriure:L'encodage textuel a aussi l'avantage d'etre une représentation
univoque des entiers et flottants.
Oui pour les entiers, pas vraiment d'accord pour les flottants (sauf
si tu utilises la même base ou une puissance de celle-ci pour les
deux formes, textuelle et binaire). Même si C99 a rajouté
DECIMAL_DIG, peu de gens savent l'utiliser à bon escient ; exemple,
cf. http://www.dinkumware.com/manuals/?page=float.html.
J'ai dit "représentation univoque", pas représentation portable.
Certes. Au temps pour moi, j'avais lu « injection » (que je définirais comme
la faculté de pouvoir revenir à un et un seul nombre flottant étant donnée
une représentation textuelle intermédiaire), et il est exact que tu n'as pas
écrit cela.
Dans le langage courant, la notion d'univoque est souvent utilisée à tort à
la place de celle de bijection (en fait bi-univoque) ;
C'est bien ce qui me préoccupe, d'ailleurs. Car je ne vois pas bien
l'intérêt d'utiliser une représentation univoque (seulement).
En poussant un peu le bouchon, j'ai du mal à comprendre en quoi la
possibilité d'écrire
printf("%5.2f", flottant);
est intéressante, dans le cadre de la transmission de données d'une machine
à une autre. Sachant tous les problèmes d'arrondis que cette représentation
tronquée va induire.
Pour ce qui est d'être portable, c'est une autre notion, liée à l'existence
d'une norme ou d'un standard (et en l'occurence, ce qui ressemble le plus à
un standard dans ce domaine, c'est la représentation dite « IEEE » !)
La nuance pour moi est qu'en choisissant le format d'affichage,
tu choisis le nombre de digits que tu veux communiquer/stocker.
Après, oui, si ton archi en propose plus ou moins, tu y perds.
Mmmh. En « choisissant un format » d'affichage (surtout %...f, évidemment),
tu définis une norme, donc tu t'intéresse plus à la portabilité qu'autre
chose.
Un format d'affichage est intéressant pour un résultat (car il précise bien
la qualité de la valeur) ; pour un résultat intermédiaire comme l'est une
forme destinée à la transmission, je vois moins. Qui plus est, la conversion
binaire-décimale va introduire un « flou » qui fait qu'après, on ne peut
plus séparer ce qui revient à la qualité initiale des données (représentée
par la précision exprimée) de ce qui revient aux arrondis binaires des
calculs déjà pratiqués, arrondis qui sont repris en partie dans l'arrondi
décimal de la conversion.
Le test classique est de passer paranoia.c sur un compilateur de Borland
(« réputés » pour la médiocre qualité de l'implémentation des flottants).
À une époque (je ne sais pas si c'est encore vrai aujourd'hui, mais une
rapide promenade sur Google donne de la matière), paranoia.c donnait des
résultats franchement mauvais avec ces compilos, quasiment uniquement parce
que la bibliothèque stdio pour les flottants faisait un arrondi incorrect
(particulièrement pour les long double, si je me souviens bien).
Je crois même que c'en était tellement grotesque qu'il y eu un patch pour la
code paranoia.c lui-même, pour pouvoir obtenir quand même les résultats de
manière lisible.
Autrement dit, un test sur la qualité des calculs en flottants teste aussi
(bien obligé) l'implémentation des conversions texte-binaire (et
vice-versa).
En news:slrnfg4ccf.6dp.Marc.Boyer@ubu.enseeiht.fr, Marc Boyer va escriure:
On 2007-10-01, Antoine Leca <root@localhost.invalid> wrote:
En news:slrnfg1d9l.6bd.Marc.Boyer@ubu.enseeiht.fr,
Marc Boyer va escriure:
L'encodage textuel a aussi l'avantage d'etre une représentation
univoque des entiers et flottants.
Oui pour les entiers, pas vraiment d'accord pour les flottants (sauf
si tu utilises la même base ou une puissance de celle-ci pour les
deux formes, textuelle et binaire). Même si C99 a rajouté
DECIMAL_DIG, peu de gens savent l'utiliser à bon escient ; exemple,
cf. http://www.dinkumware.com/manuals/?page=float.html.
J'ai dit "représentation univoque", pas représentation portable.
Certes. Au temps pour moi, j'avais lu « injection » (que je définirais comme
la faculté de pouvoir revenir à un et un seul nombre flottant étant donnée
une représentation textuelle intermédiaire), et il est exact que tu n'as pas
écrit cela.
Dans le langage courant, la notion d'univoque est souvent utilisée à tort à
la place de celle de bijection (en fait bi-univoque) ;
C'est bien ce qui me préoccupe, d'ailleurs. Car je ne vois pas bien
l'intérêt d'utiliser une représentation univoque (seulement).
En poussant un peu le bouchon, j'ai du mal à comprendre en quoi la
possibilité d'écrire
printf("%5.2f", flottant);
est intéressante, dans le cadre de la transmission de données d'une machine
à une autre. Sachant tous les problèmes d'arrondis que cette représentation
tronquée va induire.
Pour ce qui est d'être portable, c'est une autre notion, liée à l'existence
d'une norme ou d'un standard (et en l'occurence, ce qui ressemble le plus à
un standard dans ce domaine, c'est la représentation dite « IEEE » !)
La nuance pour moi est qu'en choisissant le format d'affichage,
tu choisis le nombre de digits que tu veux communiquer/stocker.
Après, oui, si ton archi en propose plus ou moins, tu y perds.
Mmmh. En « choisissant un format » d'affichage (surtout %...f, évidemment),
tu définis une norme, donc tu t'intéresse plus à la portabilité qu'autre
chose.
Un format d'affichage est intéressant pour un résultat (car il précise bien
la qualité de la valeur) ; pour un résultat intermédiaire comme l'est une
forme destinée à la transmission, je vois moins. Qui plus est, la conversion
binaire-décimale va introduire un « flou » qui fait qu'après, on ne peut
plus séparer ce qui revient à la qualité initiale des données (représentée
par la précision exprimée) de ce qui revient aux arrondis binaires des
calculs déjà pratiqués, arrondis qui sont repris en partie dans l'arrondi
décimal de la conversion.
Le test classique est de passer paranoia.c sur un compilateur de Borland
(« réputés » pour la médiocre qualité de l'implémentation des flottants).
À une époque (je ne sais pas si c'est encore vrai aujourd'hui, mais une
rapide promenade sur Google donne de la matière), paranoia.c donnait des
résultats franchement mauvais avec ces compilos, quasiment uniquement parce
que la bibliothèque stdio pour les flottants faisait un arrondi incorrect
(particulièrement pour les long double, si je me souviens bien).
Je crois même que c'en était tellement grotesque qu'il y eu un patch pour la
code paranoia.c lui-même, pour pouvoir obtenir quand même les résultats de
manière lisible.
Autrement dit, un test sur la qualité des calculs en flottants teste aussi
(bien obligé) l'implémentation des conversions texte-binaire (et
vice-versa).
En news:, Marc Boyer va escriure:On 2007-10-01, Antoine Leca wrote:En news:,
Marc Boyer va escriure:L'encodage textuel a aussi l'avantage d'etre une représentation
univoque des entiers et flottants.
Oui pour les entiers, pas vraiment d'accord pour les flottants (sauf
si tu utilises la même base ou une puissance de celle-ci pour les
deux formes, textuelle et binaire). Même si C99 a rajouté
DECIMAL_DIG, peu de gens savent l'utiliser à bon escient ; exemple,
cf. http://www.dinkumware.com/manuals/?page=float.html.
J'ai dit "représentation univoque", pas représentation portable.
Certes. Au temps pour moi, j'avais lu « injection » (que je définirais comme
la faculté de pouvoir revenir à un et un seul nombre flottant étant donnée
une représentation textuelle intermédiaire), et il est exact que tu n'as pas
écrit cela.
Dans le langage courant, la notion d'univoque est souvent utilisée à tort à
la place de celle de bijection (en fait bi-univoque) ;
C'est bien ce qui me préoccupe, d'ailleurs. Car je ne vois pas bien
l'intérêt d'utiliser une représentation univoque (seulement).
En poussant un peu le bouchon, j'ai du mal à comprendre en quoi la
possibilité d'écrire
printf("%5.2f", flottant);
est intéressante, dans le cadre de la transmission de données d'une machine
à une autre. Sachant tous les problèmes d'arrondis que cette représentation
tronquée va induire.
Pour ce qui est d'être portable, c'est une autre notion, liée à l'existence
d'une norme ou d'un standard (et en l'occurence, ce qui ressemble le plus à
un standard dans ce domaine, c'est la représentation dite « IEEE » !)
La nuance pour moi est qu'en choisissant le format d'affichage,
tu choisis le nombre de digits que tu veux communiquer/stocker.
Après, oui, si ton archi en propose plus ou moins, tu y perds.
Mmmh. En « choisissant un format » d'affichage (surtout %...f, évidemment),
tu définis une norme, donc tu t'intéresse plus à la portabilité qu'autre
chose.
Un format d'affichage est intéressant pour un résultat (car il précise bien
la qualité de la valeur) ; pour un résultat intermédiaire comme l'est une
forme destinée à la transmission, je vois moins. Qui plus est, la conversion
binaire-décimale va introduire un « flou » qui fait qu'après, on ne peut
plus séparer ce qui revient à la qualité initiale des données (représentée
par la précision exprimée) de ce qui revient aux arrondis binaires des
calculs déjà pratiqués, arrondis qui sont repris en partie dans l'arrondi
décimal de la conversion.
Le test classique est de passer paranoia.c sur un compilateur de Borland
(« réputés » pour la médiocre qualité de l'implémentation des flottants).
À une époque (je ne sais pas si c'est encore vrai aujourd'hui, mais une
rapide promenade sur Google donne de la matière), paranoia.c donnait des
résultats franchement mauvais avec ces compilos, quasiment uniquement parce
que la bibliothèque stdio pour les flottants faisait un arrondi incorrect
(particulièrement pour les long double, si je me souviens bien).
Je crois même que c'en était tellement grotesque qu'il y eu un patch pour la
code paranoia.c lui-même, pour pouvoir obtenir quand même les résultats de
manière lisible.
Autrement dit, un test sur la qualité des calculs en flottants teste aussi
(bien obligé) l'implémentation des conversions texte-binaire (et
vice-versa).