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]