Un bug vieux de 18 ans
Posted: 19 Mar 2013, 23:37
En tentant d'optimiser un programme de maths assez simple que j'avais écrit il y a bien longtemps, j'ai découvert un bug curieux sur ma Voyage 200.
En voulant voir si celui-ci avait été corrigé sur les Nspire, j'ai pu constater qu'il était toujours là, à l'identique, bien des années plus tard.
J'ai alors testé sur émulateur et vu qu'il était là dès les premières version de la TI92... et cela fait donc 18 ans que ce bug est présent dans tous les OS CAS de la série 68k et de la série Nspire.
Ce bug, je vais vous le montrer en image.
Tout d'abord, montrons un exemple où tout se passe bien.
Ci-dessous, on voit que la calculette calcule sans problème avec des listes, et gère parfaitement les règles de priorité, notamment celles particulières à la dérivation et au symbole | ("tel que").
Mais il suffit d'une toute petite modification pour que tout parte de travers.
En prenant cette fois-ci une liste contenant des complexes, les premiers calculs ne sont pas entièrement simplifiés...
... Et si on poursuit, on obtient carrément des résultats aberrants, impossibles à obtenir autrement : une matrice contenant des listes !!
L'association d'une dérivée et d'une spécification avec des listes contenant des complexes provoque ce bug... et cette apparition étrange de matrices de listes si on pousse le vice, le tout provenant probablement de la façon dont sont gérés les complexes par le CAS.
Et ce n'est pas anodin puisque ce bug m'est apparu alors que je testais un programme sur les polynômes d'interpolation de Lagrange dont voici le code que vous pouvez tester sur toutes les calculatrices TI possédant un système de calcul formel.
Si vous essayez avec une liste ne contenant que des réels tout se passe bien... et s'il y a des complexes, gare au résultat !!
Ce qu'il faut en retenir, toutefois, c'est que la calculette POURRAIT gérer les tableaux à 3 dimensions, mais qu'elle est bridée afin que ressorte une erreur "Invalid list or matrix" si un tel tableau se présente.
En voulant voir si celui-ci avait été corrigé sur les Nspire, j'ai pu constater qu'il était toujours là, à l'identique, bien des années plus tard.
J'ai alors testé sur émulateur et vu qu'il était là dès les premières version de la TI92... et cela fait donc 18 ans que ce bug est présent dans tous les OS CAS de la série 68k et de la série Nspire.
Ce bug, je vais vous le montrer en image.
Tout d'abord, montrons un exemple où tout se passe bien.
Ci-dessous, on voit que la calculette calcule sans problème avec des listes, et gère parfaitement les règles de priorité, notamment celles particulières à la dérivation et au symbole | ("tel que").
Mais il suffit d'une toute petite modification pour que tout parte de travers.
En prenant cette fois-ci une liste contenant des complexes, les premiers calculs ne sont pas entièrement simplifiés...
... Et si on poursuit, on obtient carrément des résultats aberrants, impossibles à obtenir autrement : une matrice contenant des listes !!
L'association d'une dérivée et d'une spécification avec des listes contenant des complexes provoque ce bug... et cette apparition étrange de matrices de listes si on pousse le vice, le tout provenant probablement de la façon dont sont gérés les complexes par le CAS.
Et ce n'est pas anodin puisque ce bug m'est apparu alors que je testais un programme sur les polynômes d'interpolation de Lagrange dont voici le code que vous pouvez tester sur toutes les calculatrices TI possédant un système de calcul formel.
- Code: Select all
Define lagrange(l)=Func
Local p
product(x-l)->p
p/(x-l)/(d(p,x)|x=l)
EndFunc
Si vous essayez avec une liste ne contenant que des réels tout se passe bien... et s'il y a des complexes, gare au résultat !!
Ce qu'il faut en retenir, toutefois, c'est que la calculette POURRAIT gérer les tableaux à 3 dimensions, mais qu'elle est bridée afin que ressorte une erreur "Invalid list or matrix" si un tel tableau se présente.
TI-Planet : Voyagez dans le temps pour explorer la 3ème dimension...