INT : Fonction trop lente

Archive.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

djes a écrit :
Dobro a écrit :purée !!

normal , A est un entier !!
donc 5.9999 , c'est un arrondi en fait !! :)

bon je retourne dans les doc sur Tahiti moi :)
:lol:
C'est pas ça du tout, mais bon! mdr!
vas y explique, je fatigue ! 8O

c'est bien que A va recevoir 6 au lieu de 5,9999999 non ?
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message par djes »

Essaye ça :lol:

Code : Tout sélectionner

Debug 5.9999999999999994
Debug 5.9999999999999995
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

plus assez de bit pour garder les chiffres apres la virgule ?... 8O

Code : Tout sélectionner

Debug 5.9999999999999994
Debug 5.9999999999999995
Debug ""
Debug ""
Debug Bin(5.9999999999999994)
Debug Bin(5.9999999999999995)
Debug ""
Debug "si < 10 , mieux vaux faire "
Debug Hex(5.9999999999999994)
Debug Hex(5.9999999999999995)
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message par djes »

C'est un peu compliqué à expliquer ; tu as une très bonne wiki là dessus : http://fr.wikipedia.org/wiki/Virgule_flottante, et là http://fr.wikipedia.org/wiki/IEEE_754 (je préfère la version anglaise http://en.wikipedia.org/wiki/IEEE_754-1985) ; voir aussi les liens http://babbage.cs.qc.edu/IEEE-754/Decimal.html (essaye 5.9999999999999995) , et le cours en PDF qui donne le détail http://hal.inria.fr/inria-00071477

En gros, les types normalisés utilisés par les ordinateurs pour représenter les nombres à virgule flottante ont leurs limites. Quand tu écris des nombres, l'interpréteur les convertit en binaire. Comme ceux-là ne peuvent être représentés avec la formule normalisée (voir ci-dessus), il sont arrondis. Il faut le savoir et en tenir compte. (ce n'est pas spécifique à PB)

Ca peut être gênant pour sa comptabilité, ou pour la 3D. Ainsi, dans les rotations, on cumule souvent de petits angles. Au bout de plusieurs millions de rotations, il y a un écart très significatif ! Alors il faut soit augmenter la précision (tu comprends pourquoi j'ai été content de voir arriver les .d!), soit utiliser d'autres trucs.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

oui en clair c'est le fameux test d'hebdogiciel

elever 20 fois 2 a la puissance 2

puis faire 20 fois la racine , on ne retombe pas sur 2

c'etait un test d'hebdogiciel poiur savoir si l'on avait
un ordinateur précis ou pas !! le TI99/4A faisait parti des plus précis (premier vrais 16 bits oblige );)
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

non, en fait, c'est que dépasse la résolution maximum d'un flottant.

Donc ta valeur mis dans ton float est arrondi avant de pourvoir la stocké dans le format float.

Faire

Float.f = 5.99999999999999999999999999999999

c'est un peu comme si on essayait de rentrer la valeur 8go dans un long
ça ne rentre pas
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message par djes »

Le Soldat Inconnu a écrit :non, en fait, c'est que dépasse la résolution maximum d'un flottant.

Donc ta valeur mis dans ton float est arrondi avant de pourvoir la stocké dans le format float.

Faire

Float.f = 5.99999999999999999999999999999999

c'est un peu comme si on essayait de rentrer la valeur 8go dans un long
ça ne rentre pas
C'est ce qu'on a dit, Dobro et moi, en d'autres termes...
Répondre