un 8 bits est-il bon en calcul ;-)
Modérateurs : Papy.G, fneck, Carl
- Carl
- Modérateur
- Messages : 13290
- Inscription : 08 avr. 2007 13:21
- Localisation : http://www.doledujura.fr
- Contact :
un 8 bits est-il bon en calcul ;-)
un p'tit test
10 A=2
20 FOR N=1 TO 20
30 A=SQR(A)
40 NEXT N
50 FOR N=1 TO 20
60 A=A^2
70 NEXT N
80 PRINT A
C64
Alice Matra 32
VG5000 Basic 1.1
Hector HR+
10 A=2
20 FOR N=1 TO 20
30 A=SQR(A)
40 NEXT N
50 FOR N=1 TO 20
60 A=A^2
70 NEXT N
80 PRINT A
C64
Alice Matra 32
VG5000 Basic 1.1
Hector HR+
- fneck
- Site Admin
- Messages : 17490
- Inscription : 01 avr. 2007 12:03
- Localisation : Drôme Provençale (26)
- Contact :
L'Alice s'en sort encore le mieux
Fabien https://www.system-cfg.com
Les bonnes pratiques de l'utilisateur du forum viewtopic.php?f=14&t=3
Les bonnes pratiques de l'utilisateur du forum viewtopic.php?f=14&t=3
- Carl
- Modérateur
- Messages : 13290
- Inscription : 08 avr. 2007 13:21
- Localisation : http://www.doledujura.fr
- Contact :
- Patrice
- Messages : 1544
- Inscription : 14 janv. 2008 10:42
- Localisation : https://www.ville-saintes.fr/
- Contact :
Comme souvent la différence ne vient pas de la machine, mais du programmeur. Pour le VG5000 c'est Microsoft. Je me souviens qu'à l'époque je faisais du calcul scientifique sur PC, et j'ai dû abandonner le compilateur Microsoft. Mes algorithmes, en théorie convergents, oscillaient au lieu de converger. Plus tard il y a eu les compilateurs QuickBasic et Professional Basic, qui ont corrigé le problème.
Souvent le programmeur doit choisir un compromis entre la précision et la rapidité d'exécution. Certains veulent calculer plus vite que leurs concurrents, au détriment de la justesse.
Enfin il faut se méfier des résultats plus ou moins aléatoires des boucles de calculs répétitifs. A ce petit jeu on peut prendre en défaut n'importe quel language, pour peu qu'on augmente déraisonnablement le nombre de boucles. Ce n'est plus du calcul, c'est une loterie. Une machine peut gagner par chance, mais perdre dans un autre contexte.
Exemple : le TO7 en double précision trouve
- 1.998754739761353 avec une boucle de 16
- 1.968839645385742 avec une boucle de 17
- 2.033019304275513 avec une boucle de 18
- 2.16828465461731 avec une boucle de 19
- 2.16828465461731 avec une boucle de 20
- 2.033019304275513 avec une boucle de 21
- 4.133166313171387 avec une boucle de 22 (dépassement de capacité)
- 17.08306312561035 avec une boucle de 23 (dépassement de capacité)
21 boucles donnent un meilleur résultat que 19, alors qu'on aurait pu attendre le contraire.
Autre remarque : d'après les résultats affichés (9 chiffres significatifs contre 6 pour les autres machines), le C64 et l'Alice 32 doivent utiliser un format différent pour les nombres en virgule flottante, ce qui explique leur net avantage. En revanche je suis prêt à parier que le temps d'exécution est plus long.
En passant, je signale une erreur dans la version Hector HR+ : ligne 50 il faut remplacer T par N. Je ne sais pas comment le programme a pu s'exécuter.
Pour info :
- le TO7 en Basic 1.0 trouve 2.162828 (en simple précision) et 2.16828465461731 (en double precision). Comme la double précision n'améliore pas le résultat, je suppose que la fonction SQR et l'opérateur ^ calculent en simple précision.
- le MO5 trouve aussi 2.162828
- le TO9+ en Basic512 trouve 1.64872
- le MO6 en Basic128 trouve aussi 1.64872
Souvent le programmeur doit choisir un compromis entre la précision et la rapidité d'exécution. Certains veulent calculer plus vite que leurs concurrents, au détriment de la justesse.
Enfin il faut se méfier des résultats plus ou moins aléatoires des boucles de calculs répétitifs. A ce petit jeu on peut prendre en défaut n'importe quel language, pour peu qu'on augmente déraisonnablement le nombre de boucles. Ce n'est plus du calcul, c'est une loterie. Une machine peut gagner par chance, mais perdre dans un autre contexte.
Exemple : le TO7 en double précision trouve
- 1.998754739761353 avec une boucle de 16
- 1.968839645385742 avec une boucle de 17
- 2.033019304275513 avec une boucle de 18
- 2.16828465461731 avec une boucle de 19
- 2.16828465461731 avec une boucle de 20
- 2.033019304275513 avec une boucle de 21
- 4.133166313171387 avec une boucle de 22 (dépassement de capacité)
- 17.08306312561035 avec une boucle de 23 (dépassement de capacité)
21 boucles donnent un meilleur résultat que 19, alors qu'on aurait pu attendre le contraire.
Autre remarque : d'après les résultats affichés (9 chiffres significatifs contre 6 pour les autres machines), le C64 et l'Alice 32 doivent utiliser un format différent pour les nombres en virgule flottante, ce qui explique leur net avantage. En revanche je suis prêt à parier que le temps d'exécution est plus long.
En passant, je signale une erreur dans la version Hector HR+ : ligne 50 il faut remplacer T par N. Je ne sais pas comment le programme a pu s'exécuter.
Pour info :
- le TO7 en Basic 1.0 trouve 2.162828 (en simple précision) et 2.16828465461731 (en double precision). Comme la double précision n'améliore pas le résultat, je suppose que la fonction SQR et l'opérateur ^ calculent en simple précision.
- le MO5 trouve aussi 2.162828
- le TO9+ en Basic512 trouve 1.64872
- le MO6 en Basic128 trouve aussi 1.64872
Dernière modification par Daniel le 16 janv. 2008 11:29, modifié 1 fois.
Daniel
L'obstacle augmente mon ardeur.
L'obstacle augmente mon ardeur.
- Patrice
- Messages : 1544
- Inscription : 14 janv. 2008 10:42
- Localisation : https://www.ville-saintes.fr/
- Contact :
Pour redevenir un peu plus serieux ,je confirme que pour l'Alice le calcul s'effectue bien en double précision pour le système,mais curieusement ce mode n'est pas accessible à la programmation par l'utilisateur,ceci était peut être dû à un problème de place dans la prom qui avait nécessité,à l'époque,des choix drastiques de la part de Microsoft je pense.
Concernant le calcul en boucle,cela dépend bien souvent de la manière dont elle est gérée dans la pile système de la machine,de la précision de l'arrondi,l'erreur de calcul étant cumulative dans ce mode de calcul,elle dépend de ce fait,directement du nombre d'itérations de la boucle .
Pour preuve ,à comparer aux boucles de temporisation qui sont basées sur des nombres entiers donc sans arrondi et qui sont linéaires quelque soit le nombre d'itérations .
Concernant le calcul en boucle,cela dépend bien souvent de la manière dont elle est gérée dans la pile système de la machine,de la précision de l'arrondi,l'erreur de calcul étant cumulative dans ce mode de calcul,elle dépend de ce fait,directement du nombre d'itérations de la boucle .
Pour preuve ,à comparer aux boucles de temporisation qui sont basées sur des nombres entiers donc sans arrondi et qui sont linéaires quelque soit le nombre d'itérations .
- Carl
- Modérateur
- Messages : 13290
- Inscription : 08 avr. 2007 13:21
- Localisation : http://www.doledujura.fr
- Contact :
- fneck
- Site Admin
- Messages : 17490
- Inscription : 01 avr. 2007 12:03
- Localisation : Drôme Provençale (26)
- Contact :
Daniel a écrit :...9 chiffres significatifs contre 6 pour les autres
Question très naïve, il n'y a pas une contrainte ou limite imposée pas le processeur?Patrice a écrit :...je confirme que pour l'Alice le calcul s'effectue bien en double précision pour le système
Fabien https://www.system-cfg.com
Les bonnes pratiques de l'utilisateur du forum viewtopic.php?f=14&t=3
Les bonnes pratiques de l'utilisateur du forum viewtopic.php?f=14&t=3
- Carl
- Modérateur
- Messages : 13290
- Inscription : 08 avr. 2007 13:21
- Localisation : http://www.doledujura.fr
- Contact :
- fneck
- Site Admin
- Messages : 17490
- Inscription : 01 avr. 2007 12:03
- Localisation : Drôme Provençale (26)
- Contact :
Visiblement le VG se moque de la lettre, il prend en compte simplement la boucle "for - next"
Fabien https://www.system-cfg.com
Les bonnes pratiques de l'utilisateur du forum viewtopic.php?f=14&t=3
Les bonnes pratiques de l'utilisateur du forum viewtopic.php?f=14&t=3
- Carl
- Modérateur
- Messages : 13290
- Inscription : 08 avr. 2007 13:21
- Localisation : http://www.doledujura.fr
- Contact :
- Carl
- Modérateur
- Messages : 13290
- Inscription : 08 avr. 2007 13:21
- Localisation : http://www.doledujura.fr
- Contact :
- fneck
- Site Admin
- Messages : 17490
- Inscription : 01 avr. 2007 12:03
- Localisation : Drôme Provençale (26)
- Contact :
Oups, oui bien sûr, le basic de l'Hector, évidemmentCarl a écrit :Fabien, tu ne suis pas
Fabien https://www.system-cfg.com
Les bonnes pratiques de l'utilisateur du forum viewtopic.php?f=14&t=3
Les bonnes pratiques de l'utilisateur du forum viewtopic.php?f=14&t=3
- Carl
- Modérateur
- Messages : 13290
- Inscription : 08 avr. 2007 13:21
- Localisation : http://www.doledujura.fr
- Contact :
le C64 :Floating point arithmeticle C64 et l'Alice 32 doivent utiliser un format différent pour les nombres en virgule flottante :
carl