... ou à défaut un bon PRINTUSING des familles !
Et un nombre décimal, mêm s'il ne conporte que trois ou quatre décimales, peut être un gros souci, surtout s'il n'est pas un nombre rond dans le système binaire de représentation des nombres.
30.55050 dans la notation interne iEEE 756 d'un Commodore 8bits est représenté de la façon suivante :
Code : Tout sélectionner
Bits Value Designation
31 0 (bit de signe + )
30-23 10000011 (Exposant de 2) ici 4 : positif complément de 128) 2^(+4) soit 131
22- 0 1.11101000110011101101100 (Signifiant t) ici 1.9094062
(Notez chers amis qu'il y a ici 23 bits,
en fait le 1. n'est pas mémorisé car tous les nombres iEEE commencent par ce 1.
on gange donc un bit par cette astuce - Commodore are cheap computers for the more !
Soit en HEX : 41F4676C
En effet 30.55050 ~= +1.9094062 x 2^4, les Commodore pensent en base deux et pas autrement. Donc ce nombre ne peut être qu'approché vu le nombre limité du signifiant : N= t x 2^e
Pour être exacte, il aurait fallu que le Commodore sache mémoriser t = 1.90940625 exactement. Or ce n'est pas possible.
d.dddddddd b.bbbbbbbbbbbbbbbbbbbbbbb
1.90940625 il va #1. b reste .90940625 que je multiplie par 2
1.81881250 il va # .1 b reste .8188125
1.63762500 il va # 1 b reste .637625
1.27525000 il va # 1 b reste .27525
0.55050000 il va # 0 b reste .55050
1.10100000 il va # 1 b reste .101
0.20200000 il va # 0 b reste .202
0.40400000 il va # 0 b reste .404
0.80800000 il va # 0 b reste .808
1.61600000 il va # 1 b reste .616
1.23200000 il va # 1 b reste .232
0.46400000 il va # 0 b reste .464
0.92800000 il va # 0 b reste .928
1.85600000 il va # 1 b reste .856
1.71200000 il va # 1 b reste .712
1.42400000 il va # 1 b reste .424
0.84800000 il va # 0 b reste .848
1.69600000 il va # 1 b reste .696
1.39200000 il va # 1 b reste .392
0.78400000 il va # 0 b reste .784
1.56800000 il va # 1 b reste .568
1.13600000 il va # 1 b reste .136
0.27200000 il va # 0 b reste .272
0.54400000 il va # 0b reste .544 (et nous sommes à la précision maximale d'un CBM )
1.08800000 il va #-.-----------------------1 reste .088
0.17600000 il va #-.----------------------- 0 reste .176
0.35200000 il va #-.----------------------- 0 reste .352
0.70400000 il va #-.----------------------- 0 reste .704
1.40800000 il va #-.----------------------- 1 reste .408
0.81600000 il va #-.----------------------- 0
et ainsi de suite
On arrive à T = #1.1110100011001110110110010001011010000111001010110000 mais il faut 64 bits, ce qui est un format double de ce qui est disponible sur les Cheap Business Machines !
Donc, non, 30.55050 n'est pas qu'un simple nombre décimal à 4 ou 5 décimal, c'est bien plus compliqué que cela le calcul numérique électronique.
Et donc, préciser le format souhaité, par exemple à l'aide d'un simple PRINT USING ou SCANF ou FORMAT, n'est pas tricher c'est juste une question de bon sens.
Sinon c'est participer à l'inflation des bits, et des très très grands n'importe-quoi giga truc d'aujourd'hui où avec seulement 5 Go de RAM on ne peut plus ouvrir plus de trois applications sans faire exploser la batterie de son Samsung !