OVH Cloud OVH Cloud

comparaison de flottants

209 réponses
Avatar
Emmanuel
bonjour tout le monde,

une question de vrai débutant :

Avec le programme essai.c suivant

int main(void) {
return ((1.7 + 0.1) == 1.8) ? 1 : 0;
}

j'obtiens :

$ gcc -Wall -o essai essai.c; ./essai; echo $?
1

Avec le programme essai.c suivant

int main(void) {
float x;
x = 1.7;
return ((x + 0.1) == 1.8) ? 1 : 0;
}

j'obtiens :

$ gcc -Wall -o essai essai.c; ./essai; echo $?
0

Pourtant, le programme

#include <stdio.h>
int main(void) {
float x;
x = 1.7;
printf("%f et %f\n", 1.7 + 0.1, x + 0.1);
}

affiche :
1.800000 et 1.800000

Apparremment, 1.7+0.1 et x+0.1 sont égaux ; j'imagine qu'il s'agit d'un
problème de représentation des flottants en machine mais j'aimerais bien
avoir une confirmation ou une infirmation (et une explication, si possible).

Merci par avance.

Emmanuel

10 réponses

Avatar
espie
In article <hpnugv$22d$,
Manuel Pégourié-Gonnard wrote:
Si, à notre époque, on a vraiment évolué : on ne refuse plus
« bêtement » une légitimité à tel ou tel objet mathématique pour des
raisons « philosophiques ».



Ca m'embete d'etre presque d'accord avec Sam, mais t'as quand meme des
querelles de clochers, entre ceux qui disent que tel domaine est tres
serieux, et d'autres qui te disent que c'est "meme pas des maths".

Et a cote de ca, t'as de vrais problemes de base, savoir ce qu'on fait
de l'axiome du choix, du tiers-exclus, de l'analyse non-standard (qui a
quand meme le leger defaut de virer certaines proprietes de R, et de te
permettre d'ecrire tres facilement de grosses erreurs si tu ne maitrises
pas parfaitement la difference entre logique du 1er ordre et logique d'ordre
superieur)... sans parler des intuitionnistes. Au moins en France, tu as
un mouvement (Bourbaki) qui a choisi de tout reconstruire a partir de
l'algebre, et de purement evacuer sous la moquette plein de trucs (si on
lit vite fait leur Theorie des ensembles, hop, l'axiome du choix sous
la moquette), et que tu retrouves dans la mentalite de certains mathematiciens
(de toutes facons, l'axiome du choix, c'est pas vraiment des maths, et les
intuitionnistes sont de gros clowns).

Bon, par contre, on sait tres bien categoriser tout ca, et c'est plus
vraiment "religieux" comme a l'epoque des pythagoriciens.

Note que le point de vue de base de la logique intuitioniste, c'est quand meme
que ce qui n'est pas constructible n'a pas d'existence reelle, et donc qu'on
va eviter les preuves par l'absurde. Si ca c'est pas un point de vue
philosophique...
Avatar
Samuel DEVULDER
Marc Espie a écrit :
In article <hpnugv$22d$,
Manuel Pégourié-Gonnard wrote:
Si, à notre époque, on a vraiment évolué : on ne refuse plus
« bêtement » une légitimité à tel ou tel objet mathématique pour des
raisons « philosophiques ».



Ca m'embete d'etre presque d'accord avec Sam, mais t'as quand meme des



Mais non? Je suis d'accord avec toi moi.

sam.
Avatar
Samuel DEVULDER
Manuel Pégourié-Gonnard a écrit :
Manuel Pégourié-Gonnard scripsit :

Samuel DEVULDER scripsit :

Manuel Pégourié-Gonnard a écrit :

la majorité des mathématiciens que je connais [...]


En fait non.


Si tu veux m'apprendre des trucs sur « la majorité de mathématiciens que
je connais », on va avoir un problème, parce que par définition je les
connais mieux que toi :-)



Avant qu'un petit malin ne vienne me le faire remarquer : ok, il est
théoriquement possible que tu connaisses tous les mathématiciens que je
connais, et mieux que moi. Il est également possible en pratique que
j'ai une légère tendance à abuser de l'expression « par définition » :-)



Heu j'ai pas compris là? C'est pas grave.. punaise, il y a des jours
c'est dur à suivre.. (qui a dit: oui comme tous les jours? ;-) )

Donc, même si je pense que le fond de ma pensée était clair, je
reformule : ce que je retire de mes échanges avec d'autres
mathématiciens, c'est que de nos jours, on manipule des objets



Objets mathématique : ben oui. Ca fait sérieux dans les diners en ville..

mathématiques variés sans trop se soucier de savoir lesquels sont des
« nombres » ou autre question « philosophique » sur leur nature et leur



.. surtout que manipuler des "nombres" ca ne fait plus guère savant. On
risque d'être pris pour un simple comptable dans le diner en ville
ci-dessus. J'imagine le malaise : "Ah bon? comme cela vous étudiez des
nombres. C'est fort intéressant.. et jusqu'à combien êtes vous allés au
juste, dites nous?" ;-)


légitimité. (On peut en parler à table ou à la machine à café, mais dans
l'immense majorité des cas, quand on est réellement en train de
travailler, on s'en fiche.) Et tu ne réussiras pas à me convaincre qu'il
se dégage autre chose de mon expérience personnelle :-)



Ben je suis d'accord avec toi. Les nombres c'est finalement un truc pour
compter/mesurer, donc plutôt un truc de physicien que de maths modernes
où l'on raisonne sur des structures abstraites, et pas forcément sur ce
que ça représente au juste "dans la réalité" (gros guillemets là, car il
y a des physiciens dont la réalité étudiée est une abstraction
mathématique très... abstraite).

Pour nous, à notre époque, on a pas tellement évolué: on a juste
remplacé 2 par -1!



Si, à notre époque, on a vraiment évolué : on ne refuse plus
« bêtement » une légitimité à tel ou tel objet mathématique pour des
raisons « philosophiques ».



Bah tu sais je ne cherchais pas à avoir un raisonnement profond la
dessus. C'était une boutade par rapport à l'avancée des connaissances
actuelles réellement phénoménale en la résumant en une simple formule
avec de simples nombres: au fil du progrès des sciences on est passé de
savoir manipuler aisément et sans se tromper des entités telles que
sqrt(4) à sqrt(2) et maintenant à sqrt(-1).. Passer de 4 à -1, ca c'est
du progrès *quantifiable*.

C'est ça la grosse différence par rapport aux problèmes que les
pythagoriciens avaient avec les irrationnels, plus que le fait que la
variété des objets qu'on considère de nos jours est bien plus vaste que
celle qu'ils connaissaient à l'époque.



En même temps il y a des gens qui renient l'existence d'objets du fait
du choix axiomatique avec lequel ils ne sont "philosophiquement" pas
d'accord. Par exemple, est-ce que les sphères construites à partir du
paradoxe de Banach-Tarski existent réélement? Tout dépend si l'on
accepte ou pas l'axiome du choix. ZF ou ZFC? C'est une position purement
philosophique. Qu'on accepte le C de ZF ou pas, peu importe: on peut
faire des maths avec ou sans (la présence de C n'introduit pas de
contradictions). Est-ce que c'est les mêmes maths? Vaste débat!

Parmi la grande variété des objets mathématiques qu'on utilise, il y en
a qui sont encore mal compris ou difficiles à manipuler techniquement.
Mais les complexes n'en font pas partie, bien au contraire.



Oui, mais comme je le dis: les complexes sont anecdotiques pour le coup.
Il ne faut pas toujours s'attacher aux détails ras du sol dans un fil
qui vol décidément très (trop?) haut.

sam (aie, la chutte va être douloureuse)
Avatar
Manuel Pégourié-Gonnard
Marc Espie scripsit :

In article <hpnugv$22d$,
Manuel Pégourié-Gonnard wrote:
Si, à notre époque, on a vraiment évolué : on ne refuse plus
« bêtement » une légitimité à tel ou tel objet mathématique pour des
raisons « philosophiques ».



Ca m'embete d'etre presque d'accord avec Sam, mais t'as quand meme des
querelles de clochers, entre ceux qui disent que tel domaine est tres
serieux, et d'autres qui te disent que c'est "meme pas des maths".



Oui, bien sûr qu'il y a des querelles de clochers, ça serait un miracle
qu'il n'y en ait pas. Ceci dit, souvent, presque tout le monde est d'accord
sur ce qui est vraiment des math, la querelle va plus porter sur ce qui est
plus intéressant ou productif comme point de vue. (Et bien sûr, au cours
de la dispute, des grands mots peuvent sortir, mais bon...)

Et a cote de ca, t'as de vrais problemes de base, savoir ce qu'on fait
de l'axiome du choix, du tiers-exclus, de l'analyse non-standard (qui a
quand meme le leger defaut de virer certaines proprietes de R, et de te
permettre d'ecrire tres facilement de grosses erreurs si tu ne maitrises
pas parfaitement la difference entre logique du 1er ordre et logique d'ordre
superieur)... sans parler des intuitionnistes.



Je ne nie pas que ces questions fondamentales existent. Je dis juste
qu'elles sont assez loin d'être centrales dans l'activité mathématique à
l'heure actuelle, du moins d'après mon expérience personnelle (qui est
peut-être fortement biaisée). J'ai l'impression qu'une proportion assez
faible des mathématiciens a ne serait-ce qu'une idée de ce qui se passe
en analyse non-standard (et je me range dans cette catégorie, même si
j'avais commencé à potasser le bouquin de Diener & Reeb à une époque,
c'est effectivement un domaine assez technique).

Quant aux axiomes de choix (par que si on veut être précis, il faut
distinguer le choix dénombrable, le choix « classique », le choix
dépendant, etc.) l'usage qui me paraît le plus répandu est d'essayer de
rendre explicite leur usage lorsqu'on les utilise, et de préciser dans
quels cas on peut s'en passer. Mais là encore, j'ai l'impression que la
plupart des mathématiciens sont n'ont pas beaucoup de connaissances
précises sur la question, ce qui reflète à mon sens un certain manque
d'intérêt.

(Exemple vécu : dans une préparation de leçon d'agrèg, le prof fait
remarquer au « candidat » que c'est dommage d'invoquer le théorème de
Steinitz pour dire que les corps finis ont une clôture algébrique, parce
que ce théorème utilise l'axiome du choix, alors que dans ce cas on peut
s'en passer en construisant la clôture « à la main ». Manque de bol,
cette construction manuelle utilise en fait le choix dénombrable, ce que
personne n'avait remarqué à ce moment. Pourtant ce prof était en général
plus attentif que la moyenne à ce genre de question.)

Au moins en France, tu as
un mouvement (Bourbaki) qui a choisi de tout reconstruire a partir de
l'algebre, et de purement evacuer sous la moquette plein de trucs (si on
lit vite fait leur Theorie des ensembles, hop, l'axiome du choix sous
la moquette),



Oui, je me souviens de ma déception à l'époque où je l'avais regardé
(époque où je m'intéressais bien plus que maintenant aux problèmes de
fondements).

et que tu retrouves dans la mentalite de certains mathematiciens
(de toutes facons, l'axiome du choix, c'est pas vraiment des maths, et les
intuitionnistes sont de gros clowns).

Bon, par contre, on sait tres bien categoriser tout ca, et c'est plus
vraiment "religieux" comme a l'epoque des pythagoriciens.



Voilà, un progrès indéniable est qu'au lieu d'avoir des tabous, il y a
des gens qui étudient les relations entre différents systèmes
axiomatiques voire différents systèmes de raisonnement de façon
objective et technique. (Ce qui mène par exemple au résultat que tu
mentionnais disant que tout théorème d'analyse non standard qui est
un énoncé de ZFC est aussi un théorème dans ZFC, et à la palanquée de
thèorèmes de consistance relative de différents systèmes d'axiomes.)

Après, quand il s'agit de choisir un système axiomatique dans lequel
travailler au quotidien, ZFC est de très loin le système par défaut,
vraiment peu de gens se posent la question dans leur travail quotidien
(et déjà un peu plus devant une bière ou une tasse de thé, mais même à ce
moment, pas tant que ça).

Note que le point de vue de base de la logique intuitioniste, c'est quand meme
que ce qui n'est pas constructible n'a pas d'existence reelle, et donc qu'on
va eviter les preuves par l'absurde. Si ca c'est pas un point de vue
philosophique...



Si, bien sûr, c'est un principe philosophique. Son application stricte
me semble quand même extrêmement minoritaire dans le paysage
mathématique contemporain. Et la question même de l'appliquer ou pas me
semble très éloignée des préoccupations du mathématicien moyen.

Bref, j'ai l'impression que ces questions fondamentales, qui ont sans
doute beaucoup agité une partie du monde mathématique au début du siècle
passé, sont aujourd'hui une « minorité bruyante » dans le paysage
mathématique.

--
Manuel Pégourié-Gonnard Institut de mathématiques de Jussieu
http://weblog.elzevir.fr/ http://people.math.jussieu.fr/~mpg/
Avatar
Vincent Lefevre
Dans l'article <hpnrt0$1ab$,
Manuel Pégourié-Gonnard écrit:

Vincent Lefevre scripsit :

> Dans l'article <hpn9j3$scq$,
> Manuel Pégourié-Gonnard écrit:

>> les nombres réels sont exactement ceux qui admettent un
>> développement décimal (en la base qu'on veut sauf 1) éventuellement
>> infini.
>
> Si c'est un développement décimal, la base est forcément 10. :)
> Mais bon, la norme C fait le même genre d'erreur ("decimal-point
> character"), mais probablement à cause du decimal_point qui était
> là avant le format hexa.
>
Bah, je ne connais pas d'autre façon d'appeler un développement avec un
nombre fini de chiffres, puis un séparateur « décimal » (virgule ou
point) et un suite potentiellement infinie de chiffres après. Je
t'accorde que la terminologie est malheureuse, mais c'est celle qui me
semble la plus commune. Si tu en as une plus claire à proposer, je suis
preneur.



Je propose: "écriture dans un système de numération en base B".

On peut préciser "positionnel", mais je ne pense pas que ce soit
nécessaire. :)

Et même plus simplement: "écriture en base B".

--
Vincent Lefèvre - Web: <http://www.vinc17.net/>
100% accessible validated (X)HTML - Blog: <http://www.vinc17.net/blog/>
Work: CR INRIA - computer arithmetic / Arénaire project (LIP, ENS-Lyon)
Avatar
Manuel Pégourié-Gonnard
Vincent Lefevre scripsit :

Dans l'article <hpnrt0$1ab$, Manuel Pégourié-Gonnard
écrit:

Bah, je ne connais pas d'autre façon d'appeler un développement avec
un nombre fini de chiffres, puis un séparateur « décimal » (virgule
ou point) et un suite potentiellement infinie de chiffres après. Je
t'accorde que la terminologie est malheureuse, mais c'est celle qui
me semble la plus commune. Si tu en as une plus claire à proposer, je
suis preneur.



Je propose: "écriture dans un système de numération en base B".

On peut préciser "positionnel", mais je ne pense pas que ce soit
nécessaire. :)

Et même plus simplement: "écriture en base B".



Oui, mais ça ne met pas en particulièrement en valeur le fait qu'on
admet une virgule et une suite éventuellement infinie de chiffres après.
Ceci dit, le plus simple pour éviter les confusions est encore
probablement de le dire explicitement : « les nombres réels sont
(presque par définition) ceux qui admettent une écriture en base B avec
éventuellement une infinité de chiffres après la virgule ». Du coup
c'est moins neutre dans le sens où on dit « virgule » pour ce qui sera
en fait un point selon les cas.

Note que la wikipédia francophone dit « Un séparateur décimal est un
symbole utilisé pour partager la partie décimale de la partie entière
d'un nombre décimal. », ce qui rejoint ton interprétation, tandis que
l'anglophone commence par « The decimal separator or decimal point or
decimal comma is a symbol used to mark the boundary between the integral
and the fractional parts of a decimal number in a positional numeral
system. », qui semble conforter mon idée initiale qu'on peut parler de
séparateur décimal quelle que soit la base (même si c'est
étymologiquement constradictoire), mais poursuit un peu plus loin par
« The English term "decimal" is limited to base ten, but the separator
in non-decimal numeral systems may be referred to as a radix point. In a
binary system, it is sometimes referred to as binary point. » Sauf que
je n'ai aucune idée de comment on dirait « radix point » en français.

Bref, pour moi, du moment qu'on se comprend...

--
Manuel Pégourié-Gonnard Institut de mathématiques de Jussieu
http://weblog.elzevir.fr/ http://people.math.jussieu.fr/~mpg/
Avatar
Samuel DEVULDER
Manuel Pégourié-Gonnard a écrit :

Bah, je ne connais pas d'autre façon d'appeler un développement avec un
nombre fini de chiffres, puis un séparateur « décimal » (virgule ou
point) et un suite potentiellement infinie de chiffres après. Je



C'est le séparateur de la partie fractionnaire, c'est tout, non?

t'accorde que la terminologie est malheureuse, mais c'est celle qui me
semble la plus commune. Si tu en as une plus claire à proposer, je suis
preneur.



Pas besoin de s'attacher à une quelconque base pour le point ou la
virgule. Il désigne uniquement qu'à partir de cette position là on est
dans les puissances négatives de la base.

sam.
Avatar
Vincent Lefevre
Dans l'article <hppeo0$fbr$,
Manuel Pégourié-Gonnard écrit:

Vincent Lefevre scripsit :

> Dans l'article <hpnrt0$1ab$, Manuel Pégourié-Gonnard
> écrit:
>
>> Bah, je ne connais pas d'autre façon d'appeler un développement avec
>> un nombre fini de chiffres, puis un séparateur « décimal » (virgule
>> ou point) et un suite potentiellement infinie de chiffres après. Je
>> t'accorde que la terminologie est malheureuse, mais c'est celle qui
>> me semble la plus commune. Si tu en as une plus claire à proposer, je
>> suis preneur.
>
> Je propose: "écriture dans un système de numération en base B".
>
> On peut préciser "positionnel", mais je ne pense pas que ce soit
> nécessaire. :)
>
> Et même plus simplement: "écriture en base B".
>
Oui, mais ça ne met pas en particulièrement en valeur le fait qu'on
admet une virgule et une suite éventuellement infinie de chiffres après.



"développement décimal" ne le met pas plus en valeur.

Note que la wikipédia francophone dit « Un séparateur décimal est un
symbole utilisé pour partager la partie décimale de la partie entière
d'un nombre décimal. », ce qui rejoint ton interprétation, tandis que
l'anglophone commence par « The decimal separator or decimal point or
decimal comma is a symbol used to mark the boundary between the integral
and the fractional parts of a decimal number in a positional numeral
system. », qui semble conforter mon idée initiale qu'on peut parler de
séparateur décimal quelle que soit la base (même si c'est
étymologiquement constradictoire),



Wikipédia n'est pas une source officielle. Pour le webster (1913):

{Decimal point}, a dot or full stop at the left of a decimal
fraction. The figures at the left of the point represent
units or whole numbers, as 1.05.

mais poursuit un peu plus loin par « The English term "decimal" is
limited to base ten, but the separator in non-decimal numeral
systems may be referred to as a radix point. In a binary system, it
is sometimes referred to as binary point. » Sauf que je n'ai aucune
idée de comment on dirait « radix point » en français.



Si le contexte est suffisamment clair, "virgule" suffit.

--
Vincent Lefèvre - Web: <http://www.vinc17.net/>
100% accessible validated (X)HTML - Blog: <http://www.vinc17.net/blog/>
Work: CR INRIA - computer arithmetic / Arénaire project (LIP, ENS-Lyon)
Avatar
Antoine Leca
Manuel Pégourié-Gonnard écrivit :
Vincent Lefevre scripsit :

Dans l'article <hpn9j3$scq$,
Manuel Pégourié-Gonnard écrit:
les nombres réels sont exactement ceux qui admettent un
développement décimal (en la base qu'on veut sauf 1) éventuellement
infini.


Si c'est un développement décimal, la base est forcément 10. :)
Mais bon, la norme C fait le même genre d'erreur ("decimal-point
character"), mais probablement à cause du decimal_point qui était
là avant le format hexa.



Bah, je ne connais pas d'autre façon d'appeler un développement avec un
nombre fini de chiffres, puis un séparateur « décimal » (virgule ou
point) et un suite potentiellement infinie de chiffres après.



Quand j'étais petit, les Américains n'avaient pas encore imposé leurs
conventions partout, et cela s'appelait une virgule tout court, terme
qui contrairement à « séparateur décimal » a l'avantage de fonctionner
pour d'autres bases (et qui est indépendant de la base, si je ne m'abuse).
De même, les chiffres après la virgule s'appelaient les sous-unités (du
premier, deuxième etc. ordre).


Je t'accorde que la terminologie est malheureuse, mais c'est celle qui me
semble la plus commune.



Personne ne va contester que la base dix est la plus commune, sinon il
risque de se faire décerner le titre de troll du mois (même si la barre
est très haute ce mois-ci).


Antoine
Avatar
Antoine Leca
Samuel DEVULDER écrivit :
Manuel Pégourié-Gonnard a écrit :

Bah, je ne connais pas d'autre façon d'appeler un développement avec un
nombre fini de chiffres, puis un séparateur « décimal » (virgule ou
point) et un suite potentiellement infinie de chiffres après. Je



C'est le séparateur de la partie fractionnaire, c'est tout, non?



J'y pensai aussi, mais je ne pense pas que ce soit habile ici : en effet
on cherchait (dans le sous-fil) à définir les nombres réels, donc une
référence aux fractions me paraît déplacée.


Antoine