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]

Répondre à