Float et soustraction

Où l'on discute de tout ce qui touche à l'utilisation de l'informatique en C.P.G.E. : logiciels de calcul formel, de modélisation pour les sciences de l'ingénieur, pour la chimie et la physique, etc... Trucs et astuces, questions/réponses : bienvenue !

Modérateur: Xklr_65

Float et soustraction

Messagede tore » Jeu 25 Oct, 2007 8:30 pm

Salut à tous.

Alors que depuis bientôt 15 jours je pianote avec enthousiasme dans le Javascript, voilà que je me casse les dents sur un agaçant problème de virgule flottante. Jugez-en par vous-même:
Quand je demande:
Code: Tout sélectionner
>>> 1.01-1
la console me répond:
Code: Tout sélectionner
0.010000000000000009

J'ai aussitôt été demander à Google qui m'a répondu goguenard que les utilisateurs du C# avaient les mêmes incohérences.
On me dit: définis tes varibables comme entières... Mais non! en fait voilà mon objectif:

je dispose en Javascript des méthodes parseInt(n) qui me renvoie la partie entière de [tex]n[/tex], et parseFloat(n) qui me renvoie la partie réelle (utile pour convertir une chaine de caractères). J'ai besoin d'exhumer la partie décimale de n uniquement. J'ai donc songé naturellement à la solution ParseFloat(n) - ParseInt(n)... Eh bah ça marche pas, à cause du problème sus-cité. Google n'a pas su répondre, aussi je voudrais savoir si vous avez le même problème sous Maple, et si certains d'entre vous auraient éventuellement une solution en JS.

Merci d'avance....


Edit: Au fait j'ai une solution mais ça ne répond pas au premier problème, ça ne fait que le contourner.
Il s'agit de convertir [tex]n[/tex] en chaîne de caractère justement (avec lesquelles Javascript est beaucoup plus à l'aise). Plus qu'à couper la virgule et tout ce qui vient après, avant d'utiliser parseFloat(chaîne) pour la retransformer en nombre. Mais on m'ôtera pas l'opinion que c'est moins élégant.
T0(2r)e M@til1
PCSI A 2006/2007
L1 Physique 2007/2008
L2 Informatique 2008/2009

La parade de Bugs Bunny... un choix tout à fait loufoque pour une bande d'ivrognes.
Avatar de l’utilisateur
tore
 
Messages: 65
Inscription: Lun 13 Nov, 2006 2:04 pm
Localisation: Fac de Rennes

Messagede Nicolas_LL » Lun 29 Oct, 2007 11:28 am

Bonjour,

Je ne saisi pas très bien la manoeuvre.
Dans ce cas, tu n'as plus de précision plus loin que 15 digits après ton résulat 0.01.

Tu es en dehors de la mantisse de la "double précision" (64 bits pour des réels et 128 bits pour des complexes), il faut passer à la "précision étendue" (128 bits pour des réels et 256 bits pour des complexes). C'est à dire que après 16 digits sur un nombre flottant, le résulat n'a pas de sens.
En C, de mémoire, ça se déclare float64. En Java ou C# ???

J'aurais par contre besoin de plus de détails lorsque l'on fait des opérations élémentaires d'addition et de multiplication. Si quelqu'un peut participer.

Voir les thématiques de troncature en analyse numérique.

Je ne sais pas si cela répond à ta question.

Pas mal cette idée de concours de programmation dans ce sous-forum. C'est en forgeant, qu'on devient forgeron.
Nicolas Le Loc'h
-PSI power- PCSIA: 1997-1998 ; PSI: 1998-2000
ENS Physique Marseille (ENSI): 2000-2004. [Centrale Marseille (09/2006)]
Avatar de l’utilisateur
Nicolas_LL
 
Messages: 80
Inscription: Ven 10 Nov, 2006 11:28 pm
Localisation: Latitude 48°48'N, Longitude 2°20'E (je préfère 47°83'N/4°17'W voire 47°43'N, 04°00'W)

Messagede tore » Mer 31 Oct, 2007 4:49 pm

C'est javascript attention, ne pas confondre avec java.
Mais visiblement le javascript n'est pas fait pour calculer... l'idée de manipuler une chaîne était donc la meilleure. Les complexes, mieux vaut ne pas y penser: javascript ne propose même pas ce type d'objet, il faudrait donc faire des contournements, dangereux à cause du sus-cité problème de virgule flottante (à mon avis)...

Quant au C#, je n'ai jamais mis les mains dans le cambouis, simplement je connais de vue (et un peu par Google aussi).
T0(2r)e M@til1
PCSI A 2006/2007
L1 Physique 2007/2008
L2 Informatique 2008/2009

La parade de Bugs Bunny... un choix tout à fait loufoque pour une bande d'ivrognes.
Avatar de l’utilisateur
tore
 
Messages: 65
Inscription: Lun 13 Nov, 2006 2:04 pm
Localisation: Fac de Rennes


Retourner vers L'informatique en C.P.G.E.

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités