Oui, les calculs en flottant sont TOUJOURS des approximations. Utiliser la classe BigDecimal a la place.
Merci
Francis JUGE-BOIRARD
Bonjour, Ok pour les approximation mais je dois reconnaitre que j'aimerais comprendre pourquoi. Il me semble que le codage d'un flottant en est la cause.... Est-ce que quelqu'un aurait l'adresse d'un article ou d'un cours qui tiens la route sur le sujet ????
Bonjour,
Ok pour les approximation mais je dois reconnaitre que j'aimerais comprendre
pourquoi. Il me semble que le codage d'un flottant en est la cause.... Est-ce
que quelqu'un aurait l'adresse d'un article ou d'un cours qui tiens la route sur
le sujet ????
Bonjour, Ok pour les approximation mais je dois reconnaitre que j'aimerais comprendre pourquoi. Il me semble que le codage d'un flottant en est la cause.... Est-ce que quelqu'un aurait l'adresse d'un article ou d'un cours qui tiens la route sur le sujet ????
rp
Bonjour, Ok pour les approximation mais je dois reconnaitre que j'aimerais comprendre pourquoi. Il me semble que le codage d'un flottant en est la cause.... Est-ce que quelqu'un aurait l'adresse d'un article ou d'un cours qui tiens la route sur le sujet ????
-- Romain PETIT http://cerbermail.com/?O16kfXOFcq (cliquez sur le lien ci-dessus pour me contacter en privé)
Bonjour,
Ok pour les approximation mais je dois reconnaitre que j'aimerais comprendre
pourquoi. Il me semble que le codage d'un flottant en est la cause.... Est-ce
que quelqu'un aurait l'adresse d'un article ou d'un cours qui tiens la route
sur le sujet ????
Bonjour, Ok pour les approximation mais je dois reconnaitre que j'aimerais comprendre pourquoi. Il me semble que le codage d'un flottant en est la cause.... Est-ce que quelqu'un aurait l'adresse d'un article ou d'un cours qui tiens la route sur le sujet ????
-- Romain PETIT http://cerbermail.com/?O16kfXOFcq (cliquez sur le lien ci-dessus pour me contacter en privé)
Jacques-Olivier Haenni
Bonjour,
En gros, le problème est dû au fait que certains nombres que l'on peut exactement représenter en base 10 avec un nombre de décimales fini ne peuvent pas être codés exactement en base 2 avec un nombre de décimales fini. En effet, il y a certains nombres que l'on ne peut pas représenter exactement en base 2 avec un nombre fini de chiffres.
Par analogie, il y a également des nombres que l'on ne peut pas réprésenter exactement en base 10 avec un nombre fini de chiffres. Exemple: 1/3; si on le code sur 3 décimales, ça donne 0.333 qui n'est qu'une approximation.
Pour poursuivre l'analogie, si je vais un le calcul 1/3 + 1/3 + 1/3 en base dix avec 3 décimales, ça donne: 0.333 + 0.333 + 0.333 = 0.999 alors que l'on aurait pu attendre 1.
C'est exactement le même problème avec les float/double en informatique. Mais comme ça se passe en base 2 et non 10, il est difficile pour l'humain de voir ce qui se passe...
On a d'ailleurs également un problème analogue avec les calculatrices de poches...
Il ne s'agit donc pas à proprement parler d'approximation lors du calcul, mais plutôt de limitations imposées par la représentations des nombres.
C'est pourquoi, en Java, pour des calculs financiers par exemple, il est fortement conseiller d'utiliser des BigDecimal plutôt que des double, alors que pour d'autres applications telles que des simulations ou du rendu de scène 3D, l'utilisation de double est généralement suffisante. L'utilisation de BigDecimal par rapport à des double est évidemment pénalisante en terme de performances.
Jacques-Olivier
Francis JUGE-BOIRARD wrote:
Bonjour, Ok pour les approximation mais je dois reconnaitre que j'aimerais comprendre pourquoi. Il me semble que le codage d'un flottant en est la cause.... Est-ce que quelqu'un aurait l'adresse d'un article ou d'un cours qui tiens la route sur le sujet ????
Bonjour,
En gros, le problème est dû au fait que certains nombres que l'on peut
exactement représenter en base 10 avec un nombre de décimales fini ne
peuvent pas être codés exactement en base 2 avec un nombre de décimales
fini. En effet, il y a certains nombres que l'on ne peut pas
représenter exactement en base 2 avec un nombre fini de chiffres.
Par analogie, il y a également des nombres que l'on ne peut pas
réprésenter exactement en base 10 avec un nombre fini de chiffres.
Exemple: 1/3; si on le code sur 3 décimales, ça donne 0.333 qui n'est
qu'une approximation.
Pour poursuivre l'analogie, si je vais un le calcul 1/3 + 1/3 + 1/3 en
base dix avec 3 décimales, ça donne: 0.333 + 0.333 + 0.333 = 0.999 alors
que l'on aurait pu attendre 1.
C'est exactement le même problème avec les float/double en
informatique. Mais comme ça se passe en base 2 et non 10, il est
difficile pour l'humain de voir ce qui se passe...
On a d'ailleurs également un problème analogue avec les calculatrices de
poches...
Il ne s'agit donc pas à proprement parler d'approximation lors du
calcul, mais plutôt de limitations imposées par la représentations des
nombres.
C'est pourquoi, en Java, pour des calculs financiers par exemple, il est
fortement conseiller d'utiliser des BigDecimal plutôt que des double,
alors que pour d'autres applications telles que des simulations ou du
rendu de scène 3D, l'utilisation de double est généralement suffisante.
L'utilisation de BigDecimal par rapport à des double est évidemment
pénalisante en terme de performances.
Jacques-Olivier
Francis JUGE-BOIRARD wrote:
Bonjour,
Ok pour les approximation mais je dois reconnaitre que j'aimerais
comprendre pourquoi. Il me semble que le codage d'un flottant en est
la cause.... Est-ce que quelqu'un aurait l'adresse d'un article ou
d'un cours qui tiens la route sur le sujet ????
En gros, le problème est dû au fait que certains nombres que l'on peut exactement représenter en base 10 avec un nombre de décimales fini ne peuvent pas être codés exactement en base 2 avec un nombre de décimales fini. En effet, il y a certains nombres que l'on ne peut pas représenter exactement en base 2 avec un nombre fini de chiffres.
Par analogie, il y a également des nombres que l'on ne peut pas réprésenter exactement en base 10 avec un nombre fini de chiffres. Exemple: 1/3; si on le code sur 3 décimales, ça donne 0.333 qui n'est qu'une approximation.
Pour poursuivre l'analogie, si je vais un le calcul 1/3 + 1/3 + 1/3 en base dix avec 3 décimales, ça donne: 0.333 + 0.333 + 0.333 = 0.999 alors que l'on aurait pu attendre 1.
C'est exactement le même problème avec les float/double en informatique. Mais comme ça se passe en base 2 et non 10, il est difficile pour l'humain de voir ce qui se passe...
On a d'ailleurs également un problème analogue avec les calculatrices de poches...
Il ne s'agit donc pas à proprement parler d'approximation lors du calcul, mais plutôt de limitations imposées par la représentations des nombres.
C'est pourquoi, en Java, pour des calculs financiers par exemple, il est fortement conseiller d'utiliser des BigDecimal plutôt que des double, alors que pour d'autres applications telles que des simulations ou du rendu de scène 3D, l'utilisation de double est généralement suffisante. L'utilisation de BigDecimal par rapport à des double est évidemment pénalisante en terme de performances.
Jacques-Olivier
Francis JUGE-BOIRARD wrote:
Bonjour, Ok pour les approximation mais je dois reconnaitre que j'aimerais comprendre pourquoi. Il me semble que le codage d'un flottant en est la cause.... Est-ce que quelqu'un aurait l'adresse d'un article ou d'un cours qui tiens la route sur le sujet ????