Matthieu Coutiere a écrit :
Bernard Marcelly a écrit :
Alors je te donne un exercice: faire un programme Basic qui trouve dans un
temps raisonnable quelles sont les valeurs extrêmes acceptables avec les types
Single et Double. Je n'ai pas de solution en tête.
Bernard
Une idée (algo uniquement, pas mis en forme) :
Chercher A par divisions successives.
En parallèle de la recherche de A_min, prendre B = 50*A ; à chaque division de
A, diviser B aussi, et vérifier que Bdivisé = 50 * Adivisé.
Ainsi, quand A "décrochera", B sera encore "accorché" et le décrochage se verra.
A = 1 ;
B = 5 * 10 * A;
Acheck = A;
Bcheck = B;
while ((Acheck * 45 < Bcheck) && (Acheck * 55 > Bcheck)) {
A = Acheck;
B = A * 5 * 10;
Acheck = A / 2;
Bcheck = B / 2;
}
MC
Un algo de recherche n'est pas utile car OOo-Basic donne le message
« Valeur ou type de données incorrect(e). Débordement »
Essayez ce programme :
Sub EssSingle
Dim A As Single, B As Single, R As Single
A = 1e-37
B = 5e-38
R = A + B
print ("A :" & A & " - B:" & B & " - R:" & R)
A = 1e-38
B = 5e-38
R = A + B
print ("A :" & A & " - B:" & B & " - R:" & R)
End Sub
---
OOo-Basic est capable de faire des calculs avec 5e-38, mais n'accepte
pas 1e-38
En langage C (Turbo C 3.0 - MS-DOS), 1e-38 est considéré comme '0' et
'5e-38 + 1e-38' est égale à '5e-38'.
*Conclusion*
Ce n'est pas parceque nous pouvons représenter un nombre réel de ±
3,402823 x 10^38 à ± 1,401298 x 10^-45 (conformément à la représentation
IEEE sur 32 bits) qu'il est possible de faire des calculs avec
suffisamment de précision.
Pour avoir 6 chiffres significatifs, si on utilise un single, on a
plutôt intérêt à se limiter à +/- 10^32 et +/- 10^-32 (Ces valeurs
extrêmes sont subjectives.)
Cette conclusion, vous convient-elle ? Notamment au vu des liens données
par Hélène...
Merci à tous !
--
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]