Bonjour à tous,

Pierre - Utilisateur d'OOo a écrit :
Bonsoir Bernard,

Bernard Marcelly a écrit :

Bonjour Pierre - Utilisateur d'OOo
Message du 2005-11-09 11:35:

Bonjour à tous,

Dans le livre de Bernard Marcelly, page 55, tableau 5-2, on peut lire les gammes de valeurs correspondant aux types "réels" (ce qui est confirmé par l'aide fourni avec OOo)
Single : +/- 3,402823 x 10^38 à +/- 1,401298 x 10^-45
Double : +/- 1,79769 x 10^308 à +/- 4,94065 x 10^-328

Or, jusqu'ici je travaillais en C, où il existe 2 types réels codés également sur 32 ou 64 bits. J'ai toujours lu, les infos suivantes :
float : +/- 3,4 x 10^38 à +/- 3,4 x 10^-38
double : +/- 1,7 x 10^308 à +/- 1,7 x 10^-308
Dans le système de codage binaire (mantisse et exposant) je ne comprends pas pourquoi il y aurait une dissymétrie.

Si vous pouviez m'éclairer... Je n'ai pas pris le temps de rechercher des sites sur le codage binaire de nombres réels.

Merci Bernard, Merci Laurent pour cet ouvrage de référence...

Merci pour les fleurs.
Pour les cactus, je dois dire qu'on a recopié bêtement l'aide en ligne, car ces informations ne nous semblaient pas d'une importance extrême. Bien sûr, pour avoir le fin mot il suffisait de faire une macro et voir le résultat. Mes quelques essais (sur Single) montrent que l'aide est fausse. Les limites sont de l'ordre de 10^38 à 10^-38.
J'ai fais des essais (cf. ci-dessous). Je ne suis pas certain que l'aide soit fausse !

Je te laisse déterminer les limites exactes pour Single et Double, et faire un rapport IssueZilla (voir page 650 du bouquin).

   Bernard


[...]

Est-ce que je me trompe, si je dis que le codage des données ne dépend pas du langage utilisée mais de la façon dont travail nos machines ?
Je dois me tromper, les résultats sont différents selon les langages... je ne comprends pas !

Dans ce cas, il s'agit du codage IEEExxxx avec 1 bit de signe, 23 bits de mantisse et 8 bits d'exposant (pour le Single)... j'avais eu dans les mains un ouvrage qui en parlait... il faut que je le retrouve.
L'ouvrage : "Informatique Industrielle et Java" de F. Mallet & F. Boéri, Chapitre 6, page 140, édition Dunod(Paris) ISBN 2-10-007981-6

La norme : ANSI/IEEE 754,
Le plus petit nombre 2^-149 = 1,40129e-45 (selon ma calculatrice CASIO fx82).
Le plus grand : 2^127 x (2-2^-23) = 3,40282e+38

Par conséquent, l'aide de OOo-Basic est conforme aux possibilités de codage de la norme ANSI/IEEE 754

----- Quelques essais OOo-Basic 1.1.5 [Win-Xp] -----

Sub EssSingle
    Dim A, B, R, Toto As Single
        
    A = 2.2e-44
    B = 2
    R = A / B
    print ("A :" & A & " - B:" & B & " - R:" & R)
    A = 1e-43
    B = 5e-44
    R = A + B
    print ("A :" & A & " - B:" & B & " - R:" & R)
End Sub

Ca marche !
Si vous essayez, en supprimant la déclaration de la variable Toto, vous aurez quelques suprises...
Bizarre !!! Faut-il faire un rapport IssueZilla ?

---- Quelques essais en C avec Turbo C 3.0 (environnement MS-DOS) ----

void main(void)
{
   float A, B, R ;
   A=2.2e-44 ;
   B=2 ;
   R= A/B ;
   printf (" A: %g - B: %g - R: %g", A, B, R) ;
   A=1e-43 ;
   B=5e-44 ;
   R= A+B ;
   printf (" A: %g - B: %g - R: %g", A, B, R) ;
}

Soit les résultats sont 0, soit vous obtenez un plantage du programme [Les compilateurs C ne vérifient pas les débordements.]

---- Mêmes essais avec Dev-C++ (environnement Win-XP) ----

Les calculs se font avec une incertitude de calcul très élevée : la précision est de 1 à 2 chiffres

--
A bientôt - Si QQn peut m'éclairer !

--
Pierre
Utilisateur d'OpenOffice.org, Thunderbird, Firefox, Nvu,...
--
Vive la liberté !
Merci à tous les contributeurs des projets libres.


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Répondre à