kanze wrote on 20/03/2006 11:41:
2- puisque apparemment ce que tu aimes développer le plus est
l'art de la contradiction (ni systématiquement intéressante,
ni spécialement en charte), je me sens obligé d'indiquer que
ce "bizutage" me laisse de glace.
un flottant est nécessairement une valeur définie + ou - sa
précision,
Strictement parlant... Un flottant a une valeur précise ; il
n'y a pas de + ou -. Pour des raisons évidentes
(représentation finie), les flottants ne peuvent pas
représenter tous les réels (ni toutes les rationnelles)
donc "strictement parlant", je te laisserais maintenant
monologuer ce type de platitude.
0.1 est une des valeurs qu'ils ne peuvent pas représenter.
et t'as décréter ça tout seul sans même connaître la précision
de son type double !! ben tu vois un Cray tout bête se
représente parfaitement 0.1
qui fait qu'il n'ajoute pas 0.1 à chaque passage dans la
boucle, mais quelque chose de proche.
tu expliques ça à qui ???????? 4 personnes l'ont déjà dit.
Ça dépend des formats, mais en IEEE (le format le plus
répandu aujourd'hui), la valeur décimale de la mantisse
s'étend de 0.5 à 1.0-epsilon (ou epsilon est 2^-53, je
crois).
la valeur absolue de la mantisse est toujours comprise entre 1
et la base de dénombrement (le premier bit étant caché car
toujours prédictible, cette mantisse se ramène en base 10 à
une quasi partie fractionnaire pure (un nombre décimale sans
partie entière)
Il y a aussi des valeurs spéciales, identifiées par une
valeur spéciale dans l'exposant -- 0.0 est sans doute celle
qu'on rencontre la plus souvent.
de l'exposant *et* de la mantisse.
soit il y a le nombre zero (E = 0; F = 0; S = 1)
tu as juste oublié:
-0 (E = 0; F = 0; S = 1)
-Infinity
Infinity
NaN
Là aussi, ça dépend du point de vue. La valeur du résultat
est bien définie.
on va dire ça; tabl[4325] est "indéfini" mais savoir comment
le dernier bit d'un flottant est arrondi par tous les unités
flottantes de tous les fondeurs est "définie" .. "selon le
point de vue de James".
Seulement, dans certains cas, elle sera différente
de celle du résultat de l'opération sur les réels. Mais
c'est quoi "réels", c'est pas dans IEEE 754 ni dans IEEE 854.
Ça dépend de l'application ; souvent, les valeurs en entrée
sont déjà des approximations, et c'est tout à fait normal de
prendre en compte des epsilons quand on cherche une valeur
précises -- en fait, ce qu'on veut, au niveau de
l'application, c'est déjà x+/-epsilon (avec un epsilon qui
dépend de l'application).
ça a un rapport avec la question, le fil, la chartre ???
ou c'est juste une envolée de plus ?
Mais ce n'est pas une règle générale ; ça dépend de
l'application. Et il faut bien ne pas oublier que si on
définit un isEqual() approximatif, alors isEqual(a,b) &&
isEqual(b,c) n'implique plut isEqual(a,c) -- ce qui peut
faire échouer certaines algorithmes.
oui, seulement si tu ne sais pas coder ton isEqual.
Il y a pire, évidemment, et certains algorithmes, pour
certaines valeurs (qui n'apparaîtront pas dans vos tests,
évidemment) peuvent ne pas converger avec les opérations sur
des flottants, alors qu'ils convergeront bien avec les mêmes
opérations sur des réels.
si "réel" voulait signifier "précision arbitraire" (via une
librarie es-spéciale et non une simple unité de calcul
flottant) c'est faux également.
concrétement:
ne pas coder if (f == 1.0) {}
mais if (fabs(f - 1.0) < 1e-8) {}
Si tu sais que dans ton application, la précision des
valeurs est de l'ordre 1e-8.
?!?? non, si tu sais que tu utilises des float (32bits), on
utilisera 1e-12 avec des doubles et 1e-14 avec des long
doubles.
Dans les rares cas où je me sers des flottants, je m'arrange
pour que les valeurs soient toujours exactes.
c'est pas du n'importe quoi là ??, tu as répété après tout le
monde que tous les nombres flottants ne pouvaient pas avoir
une représentation exacte de leur valeur, mais toi,
abracadabra, tu t'"arranges" avec eux et hop "c'est exact";
tiens codes donc exactement 7/5
En revanche, dans une application où je traiterais des
valeurs lues des instruments de mésure électronique, la
précision serait plutôt de l'ordre 1e-2 ou 1e-3 -- les
instruments ne peuvent pas me donner de plus, de toute
façon.
si, si, c'est vraiment du n'importe quoi. (pousse la porte
d'un labo de physique au moins une fois, tu verras c'est
intéressant).
kanze wrote on 20/03/2006 11:41:
2- puisque apparemment ce que tu aimes développer le plus est
l'art de la contradiction (ni systématiquement intéressante,
ni spécialement en charte), je me sens obligé d'indiquer que
ce "bizutage" me laisse de glace.
un flottant est nécessairement une valeur définie + ou - sa
précision,
Strictement parlant... Un flottant a une valeur précise ; il
n'y a pas de + ou -. Pour des raisons évidentes
(représentation finie), les flottants ne peuvent pas
représenter tous les réels (ni toutes les rationnelles)
donc "strictement parlant", je te laisserais maintenant
monologuer ce type de platitude.
0.1 est une des valeurs qu'ils ne peuvent pas représenter.
et t'as décréter ça tout seul sans même connaître la précision
de son type double !! ben tu vois un Cray tout bête se
représente parfaitement 0.1
qui fait qu'il n'ajoute pas 0.1 à chaque passage dans la
boucle, mais quelque chose de proche.
tu expliques ça à qui ???????? 4 personnes l'ont déjà dit.
Ça dépend des formats, mais en IEEE (le format le plus
répandu aujourd'hui), la valeur décimale de la mantisse
s'étend de 0.5 à 1.0-epsilon (ou epsilon est 2^-53, je
crois).
la valeur absolue de la mantisse est toujours comprise entre 1
et la base de dénombrement (le premier bit étant caché car
toujours prédictible, cette mantisse se ramène en base 10 à
une quasi partie fractionnaire pure (un nombre décimale sans
partie entière)
Il y a aussi des valeurs spéciales, identifiées par une
valeur spéciale dans l'exposant -- 0.0 est sans doute celle
qu'on rencontre la plus souvent.
de l'exposant *et* de la mantisse.
soit il y a le nombre zero (E = 0; F = 0; S = 1)
tu as juste oublié:
-0 (E = 0; F = 0; S = 1)
-Infinity
Infinity
NaN
Là aussi, ça dépend du point de vue. La valeur du résultat
est bien définie.
on va dire ça; tabl[4325] est "indéfini" mais savoir comment
le dernier bit d'un flottant est arrondi par tous les unités
flottantes de tous les fondeurs est "définie" .. "selon le
point de vue de James".
Seulement, dans certains cas, elle sera différente
de celle du résultat de l'opération sur les réels. Mais
c'est quoi "réels", c'est pas dans IEEE 754 ni dans IEEE 854.
Ça dépend de l'application ; souvent, les valeurs en entrée
sont déjà des approximations, et c'est tout à fait normal de
prendre en compte des epsilons quand on cherche une valeur
précises -- en fait, ce qu'on veut, au niveau de
l'application, c'est déjà x+/-epsilon (avec un epsilon qui
dépend de l'application).
ça a un rapport avec la question, le fil, la chartre ???
ou c'est juste une envolée de plus ?
Mais ce n'est pas une règle générale ; ça dépend de
l'application. Et il faut bien ne pas oublier que si on
définit un isEqual() approximatif, alors isEqual(a,b) &&
isEqual(b,c) n'implique plut isEqual(a,c) -- ce qui peut
faire échouer certaines algorithmes.
oui, seulement si tu ne sais pas coder ton isEqual.
Il y a pire, évidemment, et certains algorithmes, pour
certaines valeurs (qui n'apparaîtront pas dans vos tests,
évidemment) peuvent ne pas converger avec les opérations sur
des flottants, alors qu'ils convergeront bien avec les mêmes
opérations sur des réels.
si "réel" voulait signifier "précision arbitraire" (via une
librarie es-spéciale et non une simple unité de calcul
flottant) c'est faux également.
concrétement:
ne pas coder if (f == 1.0) {}
mais if (fabs(f - 1.0) < 1e-8) {}
Si tu sais que dans ton application, la précision des
valeurs est de l'ordre 1e-8.
?!?? non, si tu sais que tu utilises des float (32bits), on
utilisera 1e-12 avec des doubles et 1e-14 avec des long
doubles.
Dans les rares cas où je me sers des flottants, je m'arrange
pour que les valeurs soient toujours exactes.
c'est pas du n'importe quoi là ??, tu as répété après tout le
monde que tous les nombres flottants ne pouvaient pas avoir
une représentation exacte de leur valeur, mais toi,
abracadabra, tu t'"arranges" avec eux et hop "c'est exact";
tiens codes donc exactement 7/5
En revanche, dans une application où je traiterais des
valeurs lues des instruments de mésure électronique, la
précision serait plutôt de l'ordre 1e-2 ou 1e-3 -- les
instruments ne peuvent pas me donner de plus, de toute
façon.
si, si, c'est vraiment du n'importe quoi. (pousse la porte
d'un labo de physique au moins une fois, tu verras c'est
intéressant).
kanze wrote on 20/03/2006 11:41:
2- puisque apparemment ce que tu aimes développer le plus est
l'art de la contradiction (ni systématiquement intéressante,
ni spécialement en charte), je me sens obligé d'indiquer que
ce "bizutage" me laisse de glace.
un flottant est nécessairement une valeur définie + ou - sa
précision,
Strictement parlant... Un flottant a une valeur précise ; il
n'y a pas de + ou -. Pour des raisons évidentes
(représentation finie), les flottants ne peuvent pas
représenter tous les réels (ni toutes les rationnelles)
donc "strictement parlant", je te laisserais maintenant
monologuer ce type de platitude.
0.1 est une des valeurs qu'ils ne peuvent pas représenter.
et t'as décréter ça tout seul sans même connaître la précision
de son type double !! ben tu vois un Cray tout bête se
représente parfaitement 0.1
qui fait qu'il n'ajoute pas 0.1 à chaque passage dans la
boucle, mais quelque chose de proche.
tu expliques ça à qui ???????? 4 personnes l'ont déjà dit.
Ça dépend des formats, mais en IEEE (le format le plus
répandu aujourd'hui), la valeur décimale de la mantisse
s'étend de 0.5 à 1.0-epsilon (ou epsilon est 2^-53, je
crois).
la valeur absolue de la mantisse est toujours comprise entre 1
et la base de dénombrement (le premier bit étant caché car
toujours prédictible, cette mantisse se ramène en base 10 à
une quasi partie fractionnaire pure (un nombre décimale sans
partie entière)
Il y a aussi des valeurs spéciales, identifiées par une
valeur spéciale dans l'exposant -- 0.0 est sans doute celle
qu'on rencontre la plus souvent.
de l'exposant *et* de la mantisse.
soit il y a le nombre zero (E = 0; F = 0; S = 1)
tu as juste oublié:
-0 (E = 0; F = 0; S = 1)
-Infinity
Infinity
NaN
Là aussi, ça dépend du point de vue. La valeur du résultat
est bien définie.
on va dire ça; tabl[4325] est "indéfini" mais savoir comment
le dernier bit d'un flottant est arrondi par tous les unités
flottantes de tous les fondeurs est "définie" .. "selon le
point de vue de James".
Seulement, dans certains cas, elle sera différente
de celle du résultat de l'opération sur les réels. Mais
c'est quoi "réels", c'est pas dans IEEE 754 ni dans IEEE 854.
Ça dépend de l'application ; souvent, les valeurs en entrée
sont déjà des approximations, et c'est tout à fait normal de
prendre en compte des epsilons quand on cherche une valeur
précises -- en fait, ce qu'on veut, au niveau de
l'application, c'est déjà x+/-epsilon (avec un epsilon qui
dépend de l'application).
ça a un rapport avec la question, le fil, la chartre ???
ou c'est juste une envolée de plus ?
Mais ce n'est pas une règle générale ; ça dépend de
l'application. Et il faut bien ne pas oublier que si on
définit un isEqual() approximatif, alors isEqual(a,b) &&
isEqual(b,c) n'implique plut isEqual(a,c) -- ce qui peut
faire échouer certaines algorithmes.
oui, seulement si tu ne sais pas coder ton isEqual.
Il y a pire, évidemment, et certains algorithmes, pour
certaines valeurs (qui n'apparaîtront pas dans vos tests,
évidemment) peuvent ne pas converger avec les opérations sur
des flottants, alors qu'ils convergeront bien avec les mêmes
opérations sur des réels.
si "réel" voulait signifier "précision arbitraire" (via une
librarie es-spéciale et non une simple unité de calcul
flottant) c'est faux également.
concrétement:
ne pas coder if (f == 1.0) {}
mais if (fabs(f - 1.0) < 1e-8) {}
Si tu sais que dans ton application, la précision des
valeurs est de l'ordre 1e-8.
?!?? non, si tu sais que tu utilises des float (32bits), on
utilisera 1e-12 avec des doubles et 1e-14 avec des long
doubles.
Dans les rares cas où je me sers des flottants, je m'arrange
pour que les valeurs soient toujours exactes.
c'est pas du n'importe quoi là ??, tu as répété après tout le
monde que tous les nombres flottants ne pouvaient pas avoir
une représentation exacte de leur valeur, mais toi,
abracadabra, tu t'"arranges" avec eux et hop "c'est exact";
tiens codes donc exactement 7/5
En revanche, dans une application où je traiterais des
valeurs lues des instruments de mésure électronique, la
précision serait plutôt de l'ordre 1e-2 ou 1e-3 -- les
instruments ne peuvent pas me donner de plus, de toute
façon.
si, si, c'est vraiment du n'importe quoi. (pousse la porte
d'un labo de physique au moins une fois, tu verras c'est
intéressant).
« un Cray tout bête », c'est déjà une expression étrange.
Par curiosité, quelle genre de représentation binaire des flottants
utilise ce Cray tout bête pour représenter 0.1 de manière exacte ?
tout ceci étant hors chartre, google IEEE.
Ce n'est pas plus hors charte que vos réponses dans le fil « pb
iwebbrowser2 ».
Mais si ça vous amuse de développer l'incohérence en
plus du mépris...
Il dit que 0.0 est celle qu'on rencontre le plus souvent. [...]
savoir comment le dernier bit d'un flottant est arrondi
Ne pourrait-ce pas être indiqué par numeric_limits<float>::round_style
(tiens, ça c'est en charte) ?
Comment peut-on coder un isEqual approximatif (différent du =, donc) et
transitif ?
Je pense qu'ici, réels signifie réels, mathématiquement parlant.
Selon vous, une suite qui converge avec des réels converge
obligatoirement avec des flottants ?
Si tu sais que dans ton application, la précision des valeurs
est de l'ordre 1e-8.
?!?? non, si tu sais que tu utilises des float (32bits), on utilisera
1e-12 avec des doubles et 1e-14 avec des long doubles.
Et avec des floats ?
Dans les rares cas où je me sers des flottants, je m'arrange pour que
les valeurs soient toujours
exactes.
Je suppose qu'il ne vous est pas venu à l'esprit qu'il pouvait
s'arranger pour n'avoir à utilier que des nombres représentables.
« un Cray tout bête », c'est déjà une expression étrange.
Par curiosité, quelle genre de représentation binaire des flottants
utilise ce Cray tout bête pour représenter 0.1 de manière exacte ?
tout ceci étant hors chartre, google IEEE.
Ce n'est pas plus hors charte que vos réponses dans le fil « pb
iwebbrowser2 ».
Mais si ça vous amuse de développer l'incohérence en
plus du mépris...
Il dit que 0.0 est celle qu'on rencontre le plus souvent. [...]
savoir comment le dernier bit d'un flottant est arrondi
Ne pourrait-ce pas être indiqué par numeric_limits<float>::round_style
(tiens, ça c'est en charte) ?
Comment peut-on coder un isEqual approximatif (différent du =, donc) et
transitif ?
Je pense qu'ici, réels signifie réels, mathématiquement parlant.
Selon vous, une suite qui converge avec des réels converge
obligatoirement avec des flottants ?
Si tu sais que dans ton application, la précision des valeurs
est de l'ordre 1e-8.
?!?? non, si tu sais que tu utilises des float (32bits), on utilisera
1e-12 avec des doubles et 1e-14 avec des long doubles.
Et avec des floats ?
Dans les rares cas où je me sers des flottants, je m'arrange pour que
les valeurs soient toujours
exactes.
Je suppose qu'il ne vous est pas venu à l'esprit qu'il pouvait
s'arranger pour n'avoir à utilier que des nombres représentables.
« un Cray tout bête », c'est déjà une expression étrange.
Par curiosité, quelle genre de représentation binaire des flottants
utilise ce Cray tout bête pour représenter 0.1 de manière exacte ?
tout ceci étant hors chartre, google IEEE.
Ce n'est pas plus hors charte que vos réponses dans le fil « pb
iwebbrowser2 ».
Mais si ça vous amuse de développer l'incohérence en
plus du mépris...
Il dit que 0.0 est celle qu'on rencontre le plus souvent. [...]
savoir comment le dernier bit d'un flottant est arrondi
Ne pourrait-ce pas être indiqué par numeric_limits<float>::round_style
(tiens, ça c'est en charte) ?
Comment peut-on coder un isEqual approximatif (différent du =, donc) et
transitif ?
Je pense qu'ici, réels signifie réels, mathématiquement parlant.
Selon vous, une suite qui converge avec des réels converge
obligatoirement avec des flottants ?
Si tu sais que dans ton application, la précision des valeurs
est de l'ordre 1e-8.
?!?? non, si tu sais que tu utilises des float (32bits), on utilisera
1e-12 avec des doubles et 1e-14 avec des long doubles.
Et avec des floats ?
Dans les rares cas où je me sers des flottants, je m'arrange pour que
les valeurs soient toujours
exactes.
Je suppose qu'il ne vous est pas venu à l'esprit qu'il pouvait
s'arranger pour n'avoir à utilier que des nombres représentables.
« un Cray tout bête », c'est déjà une expression étrange.
Par curiosité, quelle genre de représentation binaire des flottants
utilise ce Cray tout bête pour représenter 0.1 de manière exacte ?
désolé c'était un joke, tout le monde sait que certaines familles de
Cray (X-MP) se caractérisent par leur manque de précision.
0.1 est une des valeurs qu'ils ne peuvent pas représenter.
et t'as décréter ça tout seul sans même connaître la précision de son
type double !! ben tu vois un Cray tout bête se représente
parfaitement 0.1
»
tout ceci étant hors chartre, google IEEE.
Ce n'est pas plus hors charte que vos réponses dans le fil « pb
iwebbrowser2 ».
je ne saisis pas, à relire la FAQ §1.1.7, le post était convenable.
(l'organisation de la hiérarchie microsoft.public.fr autorisait
également à répondre ici plutôt que de 'faire suivre').
la spec. IEEE reste (un peu, tout de même, ...) hors chartre et
l'exposé de toutes ses finesses n'était pas indispensable;
mais peut
être est-ce méprisant que de convier à googler sans un "pour toute
information patati merci de consulter patata ...".
Il dit que 0.0 est celle qu'on rencontre le plus souvent. [...]
j'ai bien lu qu' "il" dit que; toutefois de mon expérience on a
aucune raison de rencontrer plus souvent 0.0 que 1.0 ou 2.37 ...
Ne pourrait-ce pas être indiqué par
numeric_limits<float>::round_style (tiens, ça c'est en charte) ?
il est facile de rencontrer un compilo ne connaisant pas ces limites
là; par ailleurs la précision d'un même code peut changer selon le
proc. arith. (sur la famille 680x0 par exemple la précision interne
d'un double fait des fois 10 octets, des fois 12 octets).
Comment peut-on coder un isEqual approximatif (différent du =,
donc) et transitif ?
en jouant sur l'erreur relative (intuitée, calculée, ...); si on
considère que des expressions (immédiates ou calculées) sont "justes"
à 10^-n près alors on vérifiera:
si (fabs(a - b) < 10^-n) et (fabs(a - c) < 10^-n) alors (fabs(b - c)
< 10^-n)
cette façon de procéder n'est nullement unique et chacun dans un code
concret pourra réfléchir à un traitement plus pertinent;
Je pense qu'ici, réels signifie réels, mathématiquement parlant.
je l'ai bien lu comme ça, mais un CPU ne traite pas de "réels
mathématiques" (Mapple ou Mathematica essaient, un code C++
rarement).
Selon vous, une suite qui converge avec des réels converge
obligatoirement avec des flottants ?
la question manque peut être de précision;
dans nombre de cas la
réponse sera positive;
1/x converge vers 0 pour x "math. réel" ou
"inform. flottant" (1/b aussi, d'ailleurs).
imho, converger ne signifie pas atteindre exactement une valeur mais
tendre vers cette valeur.
dans le cas général, on définira, ici aussi, un critère d'arrêt qui
prend en compte la précision du calcul pour déterminer si le calcul a
atteint ou non le résultat voulu (exemple quel est x tel que 1/x = > 0 à 10^-6 près).
il existera toujours des expressions à forte divergence qui auront du
mal à converger, elles seront codées de manière particulière ...
mais je ne pense pas que l'on parlait de cela.
Dans les rares cas où je me sers des flottants, je m'arrange
pour que les valeurs soient toujours exactes.
Je suppose qu'il ne vous est pas venu à l'esprit qu'il pouvait
s'arranger pour n'avoir à utilier que des nombres représentables.
nuance, il ne m'est pas venu à l'esprit que cela puisse être
appliqué!
« un Cray tout bête », c'est déjà une expression étrange.
Par curiosité, quelle genre de représentation binaire des flottants
utilise ce Cray tout bête pour représenter 0.1 de manière exacte ?
désolé c'était un joke, tout le monde sait que certaines familles de
Cray (X-MP) se caractérisent par leur manque de précision.
0.1 est une des valeurs qu'ils ne peuvent pas représenter.
et t'as décréter ça tout seul sans même connaître la précision de son
type double !! ben tu vois un Cray tout bête se représente
parfaitement 0.1
»
tout ceci étant hors chartre, google IEEE.
Ce n'est pas plus hors charte que vos réponses dans le fil « pb
iwebbrowser2 ».
je ne saisis pas, à relire la FAQ §1.1.7, le post était convenable.
(l'organisation de la hiérarchie microsoft.public.fr autorisait
également à répondre ici plutôt que de 'faire suivre').
la spec. IEEE reste (un peu, tout de même, ...) hors chartre et
l'exposé de toutes ses finesses n'était pas indispensable;
mais peut
être est-ce méprisant que de convier à googler sans un "pour toute
information patati merci de consulter patata ...".
Il dit que 0.0 est celle qu'on rencontre le plus souvent. [...]
j'ai bien lu qu' "il" dit que; toutefois de mon expérience on a
aucune raison de rencontrer plus souvent 0.0 que 1.0 ou 2.37 ...
Ne pourrait-ce pas être indiqué par
numeric_limits<float>::round_style (tiens, ça c'est en charte) ?
il est facile de rencontrer un compilo ne connaisant pas ces limites
là; par ailleurs la précision d'un même code peut changer selon le
proc. arith. (sur la famille 680x0 par exemple la précision interne
d'un double fait des fois 10 octets, des fois 12 octets).
Comment peut-on coder un isEqual approximatif (différent du =,
donc) et transitif ?
en jouant sur l'erreur relative (intuitée, calculée, ...); si on
considère que des expressions (immédiates ou calculées) sont "justes"
à 10^-n près alors on vérifiera:
si (fabs(a - b) < 10^-n) et (fabs(a - c) < 10^-n) alors (fabs(b - c)
< 10^-n)
cette façon de procéder n'est nullement unique et chacun dans un code
concret pourra réfléchir à un traitement plus pertinent;
Je pense qu'ici, réels signifie réels, mathématiquement parlant.
je l'ai bien lu comme ça, mais un CPU ne traite pas de "réels
mathématiques" (Mapple ou Mathematica essaient, un code C++
rarement).
Selon vous, une suite qui converge avec des réels converge
obligatoirement avec des flottants ?
la question manque peut être de précision;
dans nombre de cas la
réponse sera positive;
1/x converge vers 0 pour x "math. réel" ou
"inform. flottant" (1/b aussi, d'ailleurs).
imho, converger ne signifie pas atteindre exactement une valeur mais
tendre vers cette valeur.
dans le cas général, on définira, ici aussi, un critère d'arrêt qui
prend en compte la précision du calcul pour déterminer si le calcul a
atteint ou non le résultat voulu (exemple quel est x tel que 1/x = > 0 à 10^-6 près).
il existera toujours des expressions à forte divergence qui auront du
mal à converger, elles seront codées de manière particulière ...
mais je ne pense pas que l'on parlait de cela.
Dans les rares cas où je me sers des flottants, je m'arrange
pour que les valeurs soient toujours exactes.
Je suppose qu'il ne vous est pas venu à l'esprit qu'il pouvait
s'arranger pour n'avoir à utilier que des nombres représentables.
nuance, il ne m'est pas venu à l'esprit que cela puisse être
appliqué!
« un Cray tout bête », c'est déjà une expression étrange.
Par curiosité, quelle genre de représentation binaire des flottants
utilise ce Cray tout bête pour représenter 0.1 de manière exacte ?
désolé c'était un joke, tout le monde sait que certaines familles de
Cray (X-MP) se caractérisent par leur manque de précision.
0.1 est une des valeurs qu'ils ne peuvent pas représenter.
et t'as décréter ça tout seul sans même connaître la précision de son
type double !! ben tu vois un Cray tout bête se représente
parfaitement 0.1
»
tout ceci étant hors chartre, google IEEE.
Ce n'est pas plus hors charte que vos réponses dans le fil « pb
iwebbrowser2 ».
je ne saisis pas, à relire la FAQ §1.1.7, le post était convenable.
(l'organisation de la hiérarchie microsoft.public.fr autorisait
également à répondre ici plutôt que de 'faire suivre').
la spec. IEEE reste (un peu, tout de même, ...) hors chartre et
l'exposé de toutes ses finesses n'était pas indispensable;
mais peut
être est-ce méprisant que de convier à googler sans un "pour toute
information patati merci de consulter patata ...".
Il dit que 0.0 est celle qu'on rencontre le plus souvent. [...]
j'ai bien lu qu' "il" dit que; toutefois de mon expérience on a
aucune raison de rencontrer plus souvent 0.0 que 1.0 ou 2.37 ...
Ne pourrait-ce pas être indiqué par
numeric_limits<float>::round_style (tiens, ça c'est en charte) ?
il est facile de rencontrer un compilo ne connaisant pas ces limites
là; par ailleurs la précision d'un même code peut changer selon le
proc. arith. (sur la famille 680x0 par exemple la précision interne
d'un double fait des fois 10 octets, des fois 12 octets).
Comment peut-on coder un isEqual approximatif (différent du =,
donc) et transitif ?
en jouant sur l'erreur relative (intuitée, calculée, ...); si on
considère que des expressions (immédiates ou calculées) sont "justes"
à 10^-n près alors on vérifiera:
si (fabs(a - b) < 10^-n) et (fabs(a - c) < 10^-n) alors (fabs(b - c)
< 10^-n)
cette façon de procéder n'est nullement unique et chacun dans un code
concret pourra réfléchir à un traitement plus pertinent;
Je pense qu'ici, réels signifie réels, mathématiquement parlant.
je l'ai bien lu comme ça, mais un CPU ne traite pas de "réels
mathématiques" (Mapple ou Mathematica essaient, un code C++
rarement).
Selon vous, une suite qui converge avec des réels converge
obligatoirement avec des flottants ?
la question manque peut être de précision;
dans nombre de cas la
réponse sera positive;
1/x converge vers 0 pour x "math. réel" ou
"inform. flottant" (1/b aussi, d'ailleurs).
imho, converger ne signifie pas atteindre exactement une valeur mais
tendre vers cette valeur.
dans le cas général, on définira, ici aussi, un critère d'arrêt qui
prend en compte la précision du calcul pour déterminer si le calcul a
atteint ou non le résultat voulu (exemple quel est x tel que 1/x = > 0 à 10^-6 près).
il existera toujours des expressions à forte divergence qui auront du
mal à converger, elles seront codées de manière particulière ...
mais je ne pense pas que l'on parlait de cela.
Dans les rares cas où je me sers des flottants, je m'arrange
pour que les valeurs soient toujours exactes.
Je suppose qu'il ne vous est pas venu à l'esprit qu'il pouvait
s'arranger pour n'avoir à utilier que des nombres représentables.
nuance, il ne m'est pas venu à l'esprit que cela puisse être
appliqué!
Arnaud Meurgues wrote on 21/03/2006 09:21:
tout ceci étant hors chartre, google IEEE.
Ce n'est pas plus hors charte que vos réponses dans le fil « pb
iwebbrowser2 ».
je ne saisis pas, à relire la FAQ §1.1.7, le post était
convenable. (l'organisation de la hiérarchie
microsoft.public.fr autorisait également à répondre ici plutôt
que de 'faire suivre').
Mais si ça vous amuse de développer l'incohérence en plus du
mépris...
la spec. IEEE reste (un peu, tout de même, ...) hors chartre
et l'exposé de toutes ses finesses n'était pas indispensable;
mais peut être est-ce méprisant que de convier à googler sans
un "pour toute information patati merci de consulter patata
...".
Il dit que 0.0 est celle qu'on rencontre le plus souvent. [...]
j'ai bien lu qu' "il" dit que; toutefois de mon expérience on
a aucune raison de rencontrer plus souvent 0.0 que 1.0 ou 2.37
... par contre les débordements (infini ou NaN) sont toujours
possibles et sont à traiter (pour un code à vocation numérique
s'entend).
savoir comment le dernier bit d'un flottant est arrondi
Ne pourrait-ce pas être indiqué par
numeric_limits<float>::round_style (tiens, ça c'est en
charte) ?
il est facile de rencontrer un compilo ne connaisant pas ces
limites là;
par ailleurs la précision d'un même code peut changer selon le
proc. arith. (sur la famille 680x0 par exemple la précision
interne d'un double fait des fois 10 octets, des fois 12
octets).
Comment peut-on coder un isEqual approximatif (différent du
=, donc) et transitif ?
en jouant sur l'erreur relative (intuitée, calculée, ...); si
on considère que des expressions (immédiates ou calculées)
sont "justes" à 10^-n près alors on vérifiera:
si (fabs(a - b) < 10^-n) et (fabs(a - c) < 10^-n)
alors (fabs(b - c) < 10^-n)
cette façon de procéder n'est nullement unique et chacun dans
un code concret pourra réfléchir à un traitement plus
pertinent; gardant notamment à l'esprit que l'arithmétique
flottante est généralement non associative.
Dans les rares cas où je me sers des flottants, je
m'arrange pour que les valeurs soient toujours exactes.
Je suppose qu'il ne vous est pas venu à l'esprit qu'il
pouvait s'arranger pour n'avoir à utilier que des nombres
représentables.
nuance, il ne m'est pas venu à l'esprit que cela puisse être
appliqué!
Arnaud Meurgues wrote on 21/03/2006 09:21:
tout ceci étant hors chartre, google IEEE.
Ce n'est pas plus hors charte que vos réponses dans le fil « pb
iwebbrowser2 ».
je ne saisis pas, à relire la FAQ §1.1.7, le post était
convenable. (l'organisation de la hiérarchie
microsoft.public.fr autorisait également à répondre ici plutôt
que de 'faire suivre').
Mais si ça vous amuse de développer l'incohérence en plus du
mépris...
la spec. IEEE reste (un peu, tout de même, ...) hors chartre
et l'exposé de toutes ses finesses n'était pas indispensable;
mais peut être est-ce méprisant que de convier à googler sans
un "pour toute information patati merci de consulter patata
...".
Il dit que 0.0 est celle qu'on rencontre le plus souvent. [...]
j'ai bien lu qu' "il" dit que; toutefois de mon expérience on
a aucune raison de rencontrer plus souvent 0.0 que 1.0 ou 2.37
... par contre les débordements (infini ou NaN) sont toujours
possibles et sont à traiter (pour un code à vocation numérique
s'entend).
savoir comment le dernier bit d'un flottant est arrondi
Ne pourrait-ce pas être indiqué par
numeric_limits<float>::round_style (tiens, ça c'est en
charte) ?
il est facile de rencontrer un compilo ne connaisant pas ces
limites là;
par ailleurs la précision d'un même code peut changer selon le
proc. arith. (sur la famille 680x0 par exemple la précision
interne d'un double fait des fois 10 octets, des fois 12
octets).
Comment peut-on coder un isEqual approximatif (différent du
=, donc) et transitif ?
en jouant sur l'erreur relative (intuitée, calculée, ...); si
on considère que des expressions (immédiates ou calculées)
sont "justes" à 10^-n près alors on vérifiera:
si (fabs(a - b) < 10^-n) et (fabs(a - c) < 10^-n)
alors (fabs(b - c) < 10^-n)
cette façon de procéder n'est nullement unique et chacun dans
un code concret pourra réfléchir à un traitement plus
pertinent; gardant notamment à l'esprit que l'arithmétique
flottante est généralement non associative.
Dans les rares cas où je me sers des flottants, je
m'arrange pour que les valeurs soient toujours exactes.
Je suppose qu'il ne vous est pas venu à l'esprit qu'il
pouvait s'arranger pour n'avoir à utilier que des nombres
représentables.
nuance, il ne m'est pas venu à l'esprit que cela puisse être
appliqué!
Arnaud Meurgues wrote on 21/03/2006 09:21:
tout ceci étant hors chartre, google IEEE.
Ce n'est pas plus hors charte que vos réponses dans le fil « pb
iwebbrowser2 ».
je ne saisis pas, à relire la FAQ §1.1.7, le post était
convenable. (l'organisation de la hiérarchie
microsoft.public.fr autorisait également à répondre ici plutôt
que de 'faire suivre').
Mais si ça vous amuse de développer l'incohérence en plus du
mépris...
la spec. IEEE reste (un peu, tout de même, ...) hors chartre
et l'exposé de toutes ses finesses n'était pas indispensable;
mais peut être est-ce méprisant que de convier à googler sans
un "pour toute information patati merci de consulter patata
...".
Il dit que 0.0 est celle qu'on rencontre le plus souvent. [...]
j'ai bien lu qu' "il" dit que; toutefois de mon expérience on
a aucune raison de rencontrer plus souvent 0.0 que 1.0 ou 2.37
... par contre les débordements (infini ou NaN) sont toujours
possibles et sont à traiter (pour un code à vocation numérique
s'entend).
savoir comment le dernier bit d'un flottant est arrondi
Ne pourrait-ce pas être indiqué par
numeric_limits<float>::round_style (tiens, ça c'est en
charte) ?
il est facile de rencontrer un compilo ne connaisant pas ces
limites là;
par ailleurs la précision d'un même code peut changer selon le
proc. arith. (sur la famille 680x0 par exemple la précision
interne d'un double fait des fois 10 octets, des fois 12
octets).
Comment peut-on coder un isEqual approximatif (différent du
=, donc) et transitif ?
en jouant sur l'erreur relative (intuitée, calculée, ...); si
on considère que des expressions (immédiates ou calculées)
sont "justes" à 10^-n près alors on vérifiera:
si (fabs(a - b) < 10^-n) et (fabs(a - c) < 10^-n)
alors (fabs(b - c) < 10^-n)
cette façon de procéder n'est nullement unique et chacun dans
un code concret pourra réfléchir à un traitement plus
pertinent; gardant notamment à l'esprit que l'arithmétique
flottante est généralement non associative.
Dans les rares cas où je me sers des flottants, je
m'arrange pour que les valeurs soient toujours exactes.
Je suppose qu'il ne vous est pas venu à l'esprit qu'il
pouvait s'arranger pour n'avoir à utilier que des nombres
représentables.
nuance, il ne m'est pas venu à l'esprit que cela puisse être
appliqué!
vous traitez James de crétin et plaisantez sur l'imprécision
« connue » des Cray :
Mais bon, vous allez tout de même nous expliquer avec quelle précision
du type double 0.1 est représentable, non ? « Blague » à part...
tout ceci étant hors chartre, google IEEE.
Ce n'est pas plus hors charte que vos réponses dans le fil « pb
iwebbrowser2 ».
je ne saisis pas, à relire la FAQ §1.1.7, le post était convenable.
Sauf si vous avez lu 1.1.2 avant.
Je ne vois pas en quoi l'organisation de la hiérarchie microsoft
autorise quoi que ce soit sur la hiérarchie fr.
Sauf que le code :
double a = 0.1;
double b = 1.0;
while (b != 0.0) b -= a;
est purement C++
et nécessite de comprendre comment fonctionnent les
flottants pour comprendre pourquoi il a très peu de
chance de fonctionner comme on s'y attend.
Il est méprisant, lorsqu'on arrive sur un groupe, de rappeler la charte
a des personnes qui y interviennent depuis plusieurs années (voire qui
ont participé à l'élaboration de la charte), surtout lorsqu'on le fait à
tort. [...]
Comme quoi vous semblez ne pas avoir la même expérience. À propos,
depuis combien de temps travaillez-vous dans l'informatique (ça va
permettre de mesurer la longueur des expériences de chacun) ?
Ce qui est connu au moment de la compilation.
Mais bon, la précision et
la méthode d'arrondi, ça n'est pas la même chose.
Peut-être, mais ce n'est pas de ça dont on parlait. On parlait de
transitivité (f(a,b) ^ f(b,c) => f(a,c)).
Donc, je réitère ma question. Comment faut-il coder le isEqual pour
qu'il soit approximatif et transitif ?
[snip]
vous traitez James de crétin et plaisantez sur l'imprécision
« connue » des Cray :
Mais bon, vous allez tout de même nous expliquer avec quelle précision
du type double 0.1 est représentable, non ? « Blague » à part...
tout ceci étant hors chartre, google IEEE.
Ce n'est pas plus hors charte que vos réponses dans le fil « pb
iwebbrowser2 ».
je ne saisis pas, à relire la FAQ §1.1.7, le post était convenable.
Sauf si vous avez lu 1.1.2 avant.
Je ne vois pas en quoi l'organisation de la hiérarchie microsoft
autorise quoi que ce soit sur la hiérarchie fr.
Sauf que le code :
double a = 0.1;
double b = 1.0;
while (b != 0.0) b -= a;
est purement C++
et nécessite de comprendre comment fonctionnent les
flottants pour comprendre pourquoi il a très peu de
chance de fonctionner comme on s'y attend.
Il est méprisant, lorsqu'on arrive sur un groupe, de rappeler la charte
a des personnes qui y interviennent depuis plusieurs années (voire qui
ont participé à l'élaboration de la charte), surtout lorsqu'on le fait à
tort. [...]
Comme quoi vous semblez ne pas avoir la même expérience. À propos,
depuis combien de temps travaillez-vous dans l'informatique (ça va
permettre de mesurer la longueur des expériences de chacun) ?
Ce qui est connu au moment de la compilation.
Mais bon, la précision et
la méthode d'arrondi, ça n'est pas la même chose.
Peut-être, mais ce n'est pas de ça dont on parlait. On parlait de
transitivité (f(a,b) ^ f(b,c) => f(a,c)).
Donc, je réitère ma question. Comment faut-il coder le isEqual pour
qu'il soit approximatif et transitif ?
[snip]
vous traitez James de crétin et plaisantez sur l'imprécision
« connue » des Cray :
Mais bon, vous allez tout de même nous expliquer avec quelle précision
du type double 0.1 est représentable, non ? « Blague » à part...
tout ceci étant hors chartre, google IEEE.
Ce n'est pas plus hors charte que vos réponses dans le fil « pb
iwebbrowser2 ».
je ne saisis pas, à relire la FAQ §1.1.7, le post était convenable.
Sauf si vous avez lu 1.1.2 avant.
Je ne vois pas en quoi l'organisation de la hiérarchie microsoft
autorise quoi que ce soit sur la hiérarchie fr.
Sauf que le code :
double a = 0.1;
double b = 1.0;
while (b != 0.0) b -= a;
est purement C++
et nécessite de comprendre comment fonctionnent les
flottants pour comprendre pourquoi il a très peu de
chance de fonctionner comme on s'y attend.
Il est méprisant, lorsqu'on arrive sur un groupe, de rappeler la charte
a des personnes qui y interviennent depuis plusieurs années (voire qui
ont participé à l'élaboration de la charte), surtout lorsqu'on le fait à
tort. [...]
Comme quoi vous semblez ne pas avoir la même expérience. À propos,
depuis combien de temps travaillez-vous dans l'informatique (ça va
permettre de mesurer la longueur des expériences de chacun) ?
Ce qui est connu au moment de la compilation.
Mais bon, la précision et
la méthode d'arrondi, ça n'est pas la même chose.
Peut-être, mais ce n'est pas de ça dont on parlait. On parlait de
transitivité (f(a,b) ^ f(b,c) => f(a,c)).
Donc, je réitère ma question. Comment faut-il coder le isEqual pour
qu'il soit approximatif et transitif ?
[snip]
Arnaud Meurgues wrote on 23/03/2006 08:59:
Mais bon, vous allez tout de même nous expliquer avec quelle
précision du type double 0.1 est représentable, non ? «
Blague » à part...
qui reproche de troller ????
blague à part j'ai déjà répondu - il me semblait évident
"mathématiquement" que 1/16 + 1/32 + 1/256 + ... ne pouvait que
converger vers 0.1 mais pas l'atteindre; c'est bizarre j'utilise vos
mots et sans doute encore vous vous enflammerez ...
et nécessite de comprendre comment fonctionnent les
flottants pour comprendre pourquoi il a très peu de
chance de fonctionner comme on s'y attend.
je suis d'accord, il me semble même que mon post disait cela.
ce que je ne m'explique pas c'est l'envie manifestée /
l'ardeur déployé / etc à m'expliquer que je dis "des bétises"
qui a une légère paraphrase près sont exactement les arguments
que l'on m'oppose (j'entends, si l'on considère que la
rhétorique acceptable ici est celle d'un développeur normal
pas forcément celle d'un agrégé es-lettres).
Il est méprisant, lorsqu'on arrive sur un groupe, de
rappeler la charte a des personnes qui y interviennent
depuis plusieurs années (voire qui ont participé à
l'élaboration de la charte), surtout lorsqu'on le fait à
tort. [...]
il est un peu irritant, lorsque l'on arrive sur un groupe, de
se faire bouler par des "c'est par professionnel", "je
voudrais pas de ça chez moi", "c'est des bétises", etc, etc
...
Arnaud Meurgues wrote on 23/03/2006 08:59:
Mais bon, vous allez tout de même nous expliquer avec quelle
précision du type double 0.1 est représentable, non ? «
Blague » à part...
qui reproche de troller ????
blague à part j'ai déjà répondu - il me semblait évident
"mathématiquement" que 1/16 + 1/32 + 1/256 + ... ne pouvait que
converger vers 0.1 mais pas l'atteindre; c'est bizarre j'utilise vos
mots et sans doute encore vous vous enflammerez ...
et nécessite de comprendre comment fonctionnent les
flottants pour comprendre pourquoi il a très peu de
chance de fonctionner comme on s'y attend.
je suis d'accord, il me semble même que mon post disait cela.
ce que je ne m'explique pas c'est l'envie manifestée /
l'ardeur déployé / etc à m'expliquer que je dis "des bétises"
qui a une légère paraphrase près sont exactement les arguments
que l'on m'oppose (j'entends, si l'on considère que la
rhétorique acceptable ici est celle d'un développeur normal
pas forcément celle d'un agrégé es-lettres).
Il est méprisant, lorsqu'on arrive sur un groupe, de
rappeler la charte a des personnes qui y interviennent
depuis plusieurs années (voire qui ont participé à
l'élaboration de la charte), surtout lorsqu'on le fait à
tort. [...]
il est un peu irritant, lorsque l'on arrive sur un groupe, de
se faire bouler par des "c'est par professionnel", "je
voudrais pas de ça chez moi", "c'est des bétises", etc, etc
...
Arnaud Meurgues wrote on 23/03/2006 08:59:
Mais bon, vous allez tout de même nous expliquer avec quelle
précision du type double 0.1 est représentable, non ? «
Blague » à part...
qui reproche de troller ????
blague à part j'ai déjà répondu - il me semblait évident
"mathématiquement" que 1/16 + 1/32 + 1/256 + ... ne pouvait que
converger vers 0.1 mais pas l'atteindre; c'est bizarre j'utilise vos
mots et sans doute encore vous vous enflammerez ...
et nécessite de comprendre comment fonctionnent les
flottants pour comprendre pourquoi il a très peu de
chance de fonctionner comme on s'y attend.
je suis d'accord, il me semble même que mon post disait cela.
ce que je ne m'explique pas c'est l'envie manifestée /
l'ardeur déployé / etc à m'expliquer que je dis "des bétises"
qui a une légère paraphrase près sont exactement les arguments
que l'on m'oppose (j'entends, si l'on considère que la
rhétorique acceptable ici est celle d'un développeur normal
pas forcément celle d'un agrégé es-lettres).
Il est méprisant, lorsqu'on arrive sur un groupe, de
rappeler la charte a des personnes qui y interviennent
depuis plusieurs années (voire qui ont participé à
l'élaboration de la charte), surtout lorsqu'on le fait à
tort. [...]
il est un peu irritant, lorsque l'on arrive sur un groupe, de
se faire bouler par des "c'est par professionnel", "je
voudrais pas de ça chez moi", "c'est des bétises", etc, etc
...
mais ça reste une erreur. Un flottant a une valeur précise ; ce
n'est ni + ni - quoique ce soit. Ce qui est vrai, c'est qu'un
flottant ne peut pas avoir n'importe quelle valeur réele, et
qu'il arrive que la valeur qu'il a n'est pas la valeur exacte
qu'on voudrait. Mais elle reste une valeur exacte.
Les flottants informatiques, pour prendre un exemple des 64 bits
mais ça reste une erreur. Un flottant a une valeur précise ; ce
n'est ni + ni - quoique ce soit. Ce qui est vrai, c'est qu'un
flottant ne peut pas avoir n'importe quelle valeur réele, et
qu'il arrive que la valeur qu'il a n'est pas la valeur exacte
qu'on voudrait. Mais elle reste une valeur exacte.
Les flottants informatiques, pour prendre un exemple des 64 bits
mais ça reste une erreur. Un flottant a une valeur précise ; ce
n'est ni + ni - quoique ce soit. Ce qui est vrai, c'est qu'un
flottant ne peut pas avoir n'importe quelle valeur réele, et
qu'il arrive que la valeur qu'il a n'est pas la valeur exacte
qu'on voudrait. Mais elle reste une valeur exacte.
Les flottants informatiques, pour prendre un exemple des 64 bits
Ce qui est très étonnant, c'est que judicieusement utilisés, ces
trucs-là trouvent le moyen d'être efficaces.
Bin entendu, "judicieusement utilisés" signifie la plupart du temps
"pas utilisés".
Ce qui est très étonnant, c'est que judicieusement utilisés, ces
trucs-là trouvent le moyen d'être efficaces.
Bin entendu, "judicieusement utilisés" signifie la plupart du temps
"pas utilisés".
Ce qui est très étonnant, c'est que judicieusement utilisés, ces
trucs-là trouvent le moyen d'être efficaces.
Bin entendu, "judicieusement utilisés" signifie la plupart du temps
"pas utilisés".
On Fri, 24 Mar 2006 16:20:04 +0100, Pierre Maurette
:Ce qui est très étonnant, c'est que judicieusement utilisés,
ces trucs-là trouvent le moyen d'être efficaces. Bin
entendu, "judicieusement utilisés" signifie la plupart du
temps "pas utilisés".
Pour résumer, les flottants sont efficaces tant qu'on ne les
utilise pas.
On Fri, 24 Mar 2006 16:20:04 +0100, Pierre Maurette
<maurettepierre@wanadoo.fr>:
Ce qui est très étonnant, c'est que judicieusement utilisés,
ces trucs-là trouvent le moyen d'être efficaces. Bin
entendu, "judicieusement utilisés" signifie la plupart du
temps "pas utilisés".
Pour résumer, les flottants sont efficaces tant qu'on ne les
utilise pas.
On Fri, 24 Mar 2006 16:20:04 +0100, Pierre Maurette
:Ce qui est très étonnant, c'est que judicieusement utilisés,
ces trucs-là trouvent le moyen d'être efficaces. Bin
entendu, "judicieusement utilisés" signifie la plupart du
temps "pas utilisés".
Pour résumer, les flottants sont efficaces tant qu'on ne les
utilise pas.