Nos chère BASIC

Tout sur les ordinateurs, liens, infos...Avec un thread par machine. Si la machine n'y est pas , créez le premier post la concernant dans ce forum

Modérateur : Politburo

Ben
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1549
Enregistré le : 21 août 2016 19:04

Nos chère BASIC

Message par Ben »

Une petite erreur d'arrondi de nos chères machines.

Code : Tout sélectionner

10 for i=0 to 40 step .2
20 if i=20 then print "egal 20"
30 next i
Ce programme n'affiche rien! Du moins sur les Commodores et le ZX-81 (le TI-99 n'a pas le souci). Ici, c'est assez simple, mais dans un programme, on peut chercher pour trouver l'erreur!
Avatar du membre
Ythunder
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 4549
Enregistré le : 09 août 2008 17:46
Localisation : 03

Re: Nos chère BASIC

Message par Ythunder »

eu au premier abord, à moins que i ne soit jamais égal à 20...
C'est bizarre ton truc
Quand je lis ça "oui des passionnées qui modifie des machines pour en faire des moutons a 5 pattes qui n'ont plus rien a voir avec la machine d'origine afin de faire la video choc sur youtube..."

Ca me fait rire. Perso, je n'ai ni chaine youtube sur les machines et je n'ai aucun mouton à 5 pattes qui n'a pàlus rien a voir avec des machines d'origine. Mais à qui s'adressait on ?
Avatar du membre
Fabrice Montupet
Administrateur
Administrateur
Messages : 11083
Enregistré le : 17 mai 2002 11:39
Localisation : Nevers - France

Re: Nos chère BASIC

Message par Fabrice Montupet »

Ben a écrit : 11 nov. 2017 12:19 Le TI-99 n'a pas le souci
Je confirme :)
Ben
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1549
Enregistré le : 21 août 2016 19:04

Re: Nos chère BASIC

Message par Ben »

C'est la représentation binaire de "I" qui pose soucis. Si on ajoute la ligne

Code : Tout sélectionner

15 print i
On voit des choses particulières sur le Commodore (j'ai testé sur le VIC-20 et le C-128). Par contre, sur le ZX-81. Les valeurs de I ont l'air correctes, mais il n'affiche quand même pas le message.
destroyedlolo
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1799
Enregistré le : 03 mai 2003 02:24
Localisation : Nonglard (Annecy)
Contact :

Re: Nos chère BASIC

Message par destroyedlolo »

Je ne veux pas dire, mais c'est toujours valable.
J'ai eu tres récemment le même probleme avec un programme C (mais ca aurait pu être avec n'importe quel langage), due à la representation binaire des flottants ou 2 != 2.00 (je ne sais plus éxactement pour quelle valeur, le 2.00 étant évidemment dans une variable).

Je pense que si je n'avais pas bidouiller sur nos antiquités, je n'aurai jamais trouvé :twisted: :twisted:
Il y a quand même moins de pb en BCD je trouve ...
Amiga, UNIX
Sharp, NetBSD http://destroyedlolo.info/
Apache, PHP 100 % dictionnary free
Vacances, Voyages 1 mispelling by word
Nico06
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 523
Enregistré le : 11 oct. 2002 12:13
Localisation : Cannes
Contact :

Re: Nos chère BASIC

Message par Nico06 »

Le Sanyo PHC-25 plante gentillement :) mais pas de façon linéaire ?

Code : Tout sélectionner

 0
 .2
 .4
 .6
 .8
 1
 1.2
 1.4
 1.6
 1.8
 2
 2.2
 2.4
 2.6
 2.8
 3
 3.2
 3.40000001
 3.60000001
 3.80000001
 4
 4.2
 4.4
 4.6
 4.8
 5
 5.2
 5.4
 5.6
 5.8
 6
 6.2
 6.39999999
 6.59999999
 6.79999999
 6.99999999
 7.19999999
 7.39999999
 7.59999999
 7.79999999
 7.99999999
 8.19999999
 8.39999999
 8.59999999
 8.79999999
 8.99999999
 9.19999999
 9.39999999
 9.59999999
 9.79999999
 9.99999999
 10.2
 10.4
 10.6
 10.8
 11
 11.2
 11.4
 11.6
 11.8
 12
 12.2
 12.4
 12.6
 12.8
 13
 13.2
 13.4
 13.6
 13.8
 14
 14.2
 14.4
 14.6
 14.8
 15
 15.2
 15.4
 15.6
 15.8
 16
 16.2
 16.4
 16.6
 16.8
 17
 17.2
 17.4
 17.6
 17.8
 18
 18.2
 18.4
 18.6
 18.8
 19
 19.2
 19.4
 19.6
 19.8
 20
 20.2
 20.4
 20.6
 20.8
 21
 21.2
 21.4
 21.6
 21.8
 22.0000001
 22.2000001
 22.4000001
 22.6000001
 22.8000001
 23.0000001
 23.2000001
 23.4000001
 23.6000001
 23.8000001
 24.0000001
 24.2000001
 24.4000001
 24.6000001
 24.8000001
 25.0000001
 25.2000001
 25.4000001
 25.6000001
 25.8000001
 26.0000001
 26.2000001
 26.4000001
 26.6000001
 26.8000001
 27.0000001
 27.2000001
 27.4000001
 27.6000001
 27.8000001
 28.0000001
 28.2000002
 28.4000002
 28.6000002
 28.8000002
 29.0000002
 29.2000002
 29.4000002
 29.6000002
 29.8000002
 30.0000002
 30.2000002
 30.4000002
 30.6000002
 30.8000002
 31.0000002
 31.2000002
 31.4000002
 31.6000002
 31.8000002
 32.0000002
 32.2000002
 32.4000002
 32.6000002
 32.8000002
 33.0000002
 33.2000002
 33.4000002
 33.6000002
 33.8000002
 34.0000002
 34.2000002
 34.4000002
 34.6000003
 34.8000003
 35.0000003
 35.2000003
 35.4000003
 35.6000003
 35.8000003
 36.0000003
 36.2000003
 36.4000003
 36.6000003
 36.8000003
 37.0000003
 37.2000003
 37.4000003
 37.6000003
 37.8000003
 38.0000003
 38.2000003
 38.4000003
 38.6000003
 38.8000003
 39.0000003
 39.2000003
 39.4000003
 39.6000003
 39.8000003
Y a des matins de brocante, on ferait mieux de rester couché - Confucius
Avatar du membre
rogeroge
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 4227
Enregistré le : 14 mai 2010 21:41
Localisation : Entre Nancy et Bercy : à Torcy

Re: Nos chère BASIC

Message par rogeroge »

Bonjour,
Avec PC-BASIC qui simule le GW-BASIC avec les PC modernes, le programme ne fonctionne pas.

Voici une proposition avec modifications qui donne un résultat :
La variable A rendu propre remplace la variable I du compteur qui contient des dispersions faussant le résultat.

Code : Tout sélectionner

10 FOR I=0 TO 40 STEP .2
12 A=INT(I*100)/100
20 IF A=20 THEN PRINT "EGAL 20"
30 NEXT I
run 
EGAL 20
Ok
Il faut être fou pour venir sur ce site mais encore plus fou pour ne pas y revenir !
jxano
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2362
Enregistré le : 16 févr. 2008 23:34
Localisation : Paris 20ème

Re: Nos chère BASIC

Message par jxano »

Je réécrirais le programme ainsi :

Code : Tout sélectionner

10 FOR I=0 TO 400 STEP 2
12 A=I/10
20 IF A=20 THEN PRINT "EGAL 20"
30 NEXT I
Programmeur abscons.
Avatar du membre
Ythunder
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 4549
Enregistré le : 09 août 2008 17:46
Localisation : 03

Re: Nos chère BASIC

Message par Ythunder »

rogeroge a écrit : 12 nov. 2017 16:39 Bonjour,
Avec PC-BASIC qui simule le GW-BASIC avec les PC modernes, le programme ne fonctionne pas.

Voici une proposition avec modifications qui donne un résultat :
La variable A rendu propre remplace la variable I du compteur qui contient des dispersions faussant le résultat.

Code : Tout sélectionner

10 FOR I=0 TO 40 STEP .2
12 A=INT(I*100)/100
20 IF A=20 THEN PRINT "EGAL 20"
30 NEXT I
run 
EGAL 20
Ok
Ah pas mal, le fait de mettre une autre variable avec calcul de l'entier de i !
Quand je lis ça "oui des passionnées qui modifie des machines pour en faire des moutons a 5 pattes qui n'ont plus rien a voir avec la machine d'origine afin de faire la video choc sur youtube..."

Ca me fait rire. Perso, je n'ai ni chaine youtube sur les machines et je n'ai aucun mouton à 5 pattes qui n'a pàlus rien a voir avec des machines d'origine. Mais à qui s'adressait on ?
kenneth
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 948
Enregistré le : 22 sept. 2010 13:48
Localisation : France PdD

Re: Nos chère BASIC

Message par kenneth »

Donc il doit y avoir un résidu de calcul qui n'apparaît pas dans la mantisse.
Avatar du membre
rogeroge
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 4227
Enregistré le : 14 mai 2010 21:41
Localisation : Entre Nancy et Bercy : à Torcy

Re: Nos chère BASIC

Message par rogeroge »

Ce résidu ou dispersion propre à la nature du langage et au fonctionnement de l'électronique doit se corriger
par une programmation, soit insérée dans la machine, soit provoquée par le programmeur.
En simple précision sur un PC, on voit apparaître avec la ligne additionnelle 15 ajoutée au listing de Ben :

Code : Tout sélectionner

15 PRINT I;" ";

Voici un extrait de l'affichage après RUN 
........
17.39999   17.6  17.8   ....
19.6  19.8  20  20.20001  20.40001  .....
Il doit y avoir un petit monde en décimales non affiché après le nombre 20, ce qui explique l'erreur du programme
et la nécessité d'une retouche.
Il faut être fou pour venir sur ce site mais encore plus fou pour ne pas y revenir !
Ben
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1549
Enregistré le : 21 août 2016 19:04

Re: Nos chère BASIC

Message par Ben »

rogeroge a écrit : 13 nov. 2017 13:27 Il doit y avoir un petit monde en décimales non affiché après le nombre 20, ce qui explique l'erreur du programme
et la nécessité d'une retouche.
En fait, c'est sûrement la représentation binaire des décimales qui pose problème. Comme dis destroyedlolo, une représentation en BCD devrait arranger le problème. Sauf que sur les Commodores, je ne vois pas comment imposer la représentation interne.
Avatar du membre
rogeroge
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 4227
Enregistré le : 14 mai 2010 21:41
Localisation : Entre Nancy et Bercy : à Torcy

Re: Nos chère BASIC

Message par rogeroge »

Tout à fait et le codage BCD existerait sur la plupart des calculatrices et moins des ordinateurs.
J'ai ajouté une ligne 5 en plus de la ligne 15 au listing "Ben" natif.
Cette demande d'affichage des nombres en double précision montre les décimales plantant le programme.
Image
Il faut être fou pour venir sur ce site mais encore plus fou pour ne pas y revenir !
Avatar du membre
Ythunder
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 4549
Enregistré le : 09 août 2008 17:46
Localisation : 03

Re: Nos chère BASIC

Message par Ythunder »

En fait à chaque fois que le pas de 0.2 atteint le prochain nombre entier, il faudrait réinitialiser la valeur décimal à 0.
Quand je lis ça "oui des passionnées qui modifie des machines pour en faire des moutons a 5 pattes qui n'ont plus rien a voir avec la machine d'origine afin de faire la video choc sur youtube..."

Ca me fait rire. Perso, je n'ai ni chaine youtube sur les machines et je n'ai aucun mouton à 5 pattes qui n'a pàlus rien a voir avec des machines d'origine. Mais à qui s'adressait on ?
Ben
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1549
Enregistré le : 21 août 2016 19:04

Re: Nos chère BASIC

Message par Ben »

Ou arrondir à la 2e décimale.

Ce qui peut aussi induire en erreur, c'est que l'instruction PRINT arrondi la représentation réelle en mémoire. Par exemple, toujours sur le Commodore:

Code : Tout sélectionner

PRINT 3/5*5
Affiche bien "3". Mais

Code : Tout sélectionner

PRINT 3/5*5=3
Affiche "0", alors que l'équivalence devrait être vérifiée.

Présenté comme ça, ça a l'air trivial, mais dans des programmes conséquents, on peut chercher longtemps l'erreur :-/
Répondre

Retourner vers « Tous les ordinateurs »