Précédent   Forum du club des développeurs et IT Pro > Logiciels > Autres Logiciels > OpenOffice & LibreOffice
OpenOffice & LibreOffice Forum d'entraide sur OpenOffice.org et LibreOffice. Avant de poster : La F.A.Q OpenOffice
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 12/10/2012, 01h27   #1
kikiops
Invité de passage
 
Inscription : mai 2002
Messages : 6
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 6
Points : 3
Points : 3
Envoyer un message via AIM à kikiops
Par défaut Math niveau CM2 au moins

Bonjour
Ca fait un petit moment que je n'avais pas touché a openOffice et je bute sur un problème de très très haut niveau (cm2)

Code :
1
2
3
4
5
6
7
Sub Main
		Dim maVariable as Double
		
		maVariable = 12 - 11.21
		msgbox maVariable
End Sub
Pourquoi "maVariable" retourne 0,7899999999999 ???

Merci de votre aide, j'ai déjà honte
kikiops est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/10/2012, 16h16   #2
Jipété
Membre Expert
 
Inscription : juillet 2006
Messages : 1 946
Détails du profil
Informations personnelles :
Localisation : France, Hérault (Languedoc Roussillon)

Informations forums :
Inscription : juillet 2006
Messages : 1 946
Points : 2 196
Points : 2 196
Yop !
Citation:
Envoyé par kikiops Voir le message
(...) Pourquoi "maVariable" retourne 0,7899999999999 ???
Parce que !

Parce que c'est un problème de conversion, d'arrondi, toussa toussa, un "double" a une précision de 29 chiffres si l'aide est correcte...

Pour contourner le problème, faut faire sauter la décimale :
Code :
1
2
3
4
5
6
Sub Main
		Dim maVariable as Double
		
		maVariable = (12 * 100) - (11.21 * 100)
		msgbox (maVariable / 100)
End Sub
__________________
Après avoir posté, relisez-vous ! Et en cas d'erreur, de faute d'orthographe ou d'oubli, il existe un bouton « Éditer », à utiliser sans modération
On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
Mes 2 cts,
--
jp
Jipété est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/10/2012, 18h54   #3
kikiops
Invité de passage
 
Inscription : mai 2002
Messages : 6
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 6
Points : 3
Points : 3
Envoyer un message via AIM à kikiops
Citation:
Parce que !
Forcement !

J'ai l'impression d’être encore à :
Code :
1
2
3
4
5
6
Sub Main
            MsgBox 'HelloWord'
End Sub

' Et m... meme ca j'y arrive po :mouarf:
Merci de ton aide
kikiops est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/10/2012, 15h35   #4
sevyc64
Modérateur
 
Avatar de sevyc64
 
Homme Yves
Développeur informatique
Inscription : janvier 2007
Messages : 5 296
Détails du profil
Informations personnelles :
Nom : Homme Yves
Âge : 40
Localisation : France, Pyrénées Atlantiques (Aquitaine)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : janvier 2007
Messages : 5 296
Points : 11 974
Points : 11 974
LE problème vient du type de variable utilisé. Les types Double et Float (Single suivant les appellations) sont des nombres dit à virgule flottante respectivement Double et Simple précision.

Ces nombres là ont la particularité de ne pas être des nombres exacts. C'est à dire que l'encodage de la variable en mémoire ne permet pas de représenter la totalité des nombres possibles.
Si, pour une valeur donnée, celle-ci n'est pas représentable, elle sera représentée par la 1ere valeur possible la plus proche. Ce qui provoque des arrondis, avec une erreur qui se propage au fil des calculs et des arrondis sur les résultats successifs.
__________________
--- Sevyc64 ---

Parce que le partage est notre force, la connaissance sera notre victoire
sevyc64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/10/2012, 19h41   #5
kikiops
Invité de passage
 
Inscription : mai 2002
Messages : 6
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 6
Points : 3
Points : 3
Envoyer un message via AIM à kikiops
Citation:
Envoyé par sevyc64 Voir le message
avec une erreur qui se propage au fil des calculs et des arrondis sur les résultats successifs.
C'est bien ce qui m’inquiète !
Comment gérer efficacement et proprement ces variables, car même si mes macros ne demandent pas une grande précision, "7E-02" ou "7,8999999999999" n'est pas le résultat espéré.


Merci sevyc64
kikiops est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/10/2012, 22h19   #6
sevyc64
Modérateur
 
Avatar de sevyc64
 
Homme Yves
Développeur informatique
Inscription : janvier 2007
Messages : 5 296
Détails du profil
Informations personnelles :
Nom : Homme Yves
Âge : 40
Localisation : France, Pyrénées Atlantiques (Aquitaine)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : janvier 2007
Messages : 5 296
Points : 11 974
Points : 11 974
Les nombres à virgule flottante posent problème en comptabilité et dans le domaine financier et dans les domaines ou la précision loin après la virgule est très importante. On leur préfèrera dans ce cas des nombres justes, à virgule fixe, représentés souvent par des types (dépend des langages) tel que Decimal, Currency ...

Dans la majorité des cas, les nombres à virgule flottante sont largement suffisant, c'est les plus utilisés. Plus de 80% des calculs d'un processeur sont fait sur eux, la virgule flottante est la structure de base de calcul des processeurs actuels.

Donc, sauf à avoir besoin d'une très grande précision, voire de calculs absolument juste, ils sont parfaitement utilisables en en connaissant les limites, comme notamment faire arrondis lorsqu'il n'est pas nécessaire de conserver la précision du nombre.

Certes, 7,8999999999999 n'est pas le résultat attendu, mais tu n'as probablement pas besoin (pour l'affichage par exemple) d'avoir 13 chiffres après la virgule. Si 2 te suffisent l'arrondi te donnera 7.90, nombre attendu je présume.
__________________
--- Sevyc64 ---

Parce que le partage est notre force, la connaissance sera notre victoire
sevyc64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/10/2012, 00h29   #7
kikiops
Invité de passage
 
Inscription : mai 2002
Messages : 6
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 6
Points : 3
Points : 3
Envoyer un message via AIM à kikiops
Merci sevyc64 pour ces détails. J'ai la mémoire qui me revient ! Ca y est j'ai honte
kikiops est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 07h37.


 
 
 
 
Partenaires

Hébergement Web