1

Bonjour,

je programme habituellement en TI-basic sur ma calculatrice, vu que je me contente de petits programmes mathématiques qui font surtout usage des fonctions de l'AMS.

Je sais (je crois) que l'on peut utiliser les fonctions mathématiques de la TI en C, mais gagne-t-on en vitesse d'exécution là-dessus ?

A part pour les graphiques, où gagne-t-on sensiblement en vitesse en passant au C ? Manipulation de listes, boucles for ?

2

Si tu utilises les fonctions natives de la Ti en C, je ne suis pas sûr que tu gagnes tant que ça. Un peu, certes, puisque toute l'exécution même de ton programme se passe d'une couche d'interprétation qui est excessivement lente. Mais les fonctions mathématiques d'AMS manipulent des structures de données pas toujours prévues pour être traitées rapidement, et que tu sois en C ou en Basic il ne se passera rien de miraculeux de ce coté.

Par contre, si tu peux transcrire les traitements simples de tes programmes en C et ne conserver des appels aux fonctions mathématiques que pour les parties un peu plus complexes, tu pourras probablement en tirer un gain beaucoup plus intéressant.
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

3

Merci de la réponse rapide !

En ce moment, j'essaie d'améliorer un fonction de résolution que j'avais prévue pour l'utilisation avec le programme RPN. Comme on peut mettre des raccourcis clavier dans tous les sens avec RPN, et qu'il est tellement rapide j'avais il y a un certain temps créé une fonction gsolve() [guess_solve, quelle contradiction!], qui en gros ne prenais qu'un argument, l'expression à résoudre, et gsolve devait déterminer s'il s'agissait d'une équation à une ou deux inconnues, d'une equa diff, qu'elle était la variable et à quoi c'était égal, pour ensuite tout balancer au solve() de l'AMS. Parce que je suis traumatisé par la syntaxe des eqd ou des équations simultanées que je n'arrive jamais à retenir, et que j'en ai marre d'écrire que la variable c'est x, ou que oui ! l'équation est bien égale à 0 (je suis physicien...).

genre gsolve(3x+2 and y-2x=a), ou gsolve(3x+2 = 0 and y-2x=a), ou gsolve({3x+2,y-2x=a}) me renverrait {x=-2/3,y=(3a-4)/3}.


Bon, je m'enflamme un peu.

En résumé, j'essaie de faire une analyse de l'expression entrée (c'est pour cela que je révise la fonction part() sur l'autre rubrique du forum). Alors, ça n'était pas très long, mais... un petit temps de réflexion avant d'afficher le résultat, que j'aimerais, pour l'utile et pour le plaisir, réduire au minimum.

Il y a beaucoup de IF dans mon programme (je fais des SWITCH/CASE, mais en TI-BASIC...), donc là-dessus on peut gagner un temps significatif ? Mon programme n'est pas très gros ni très lent... disons 1/2 s supplémentaire à l'exécution, mais ça créé une latence qui ne fait pas propre.

4

Comme dit Zephyr, faut savoir si la latence est principalement dûe à tes structures de contrôle (if, for, manipulation de variables etc...), ou alors aux fonctions de calculs mathématiques. Si ce sont les fonctions mathématiques qui bouffent le temps, t'auras pas grand chose à y gagner. En C, tu ne feras que les appeler différemment, mais ce seront les mêmes fonctions.
Par contre, en effet, t'as gros à gagner sur l'algorithme de ton programme.

A toi de voir ce que signifie gros dans ton cas, si c'est quelques centièmes de seconde, tu ne gagneras que ça...

5

(cross avec la réponse de Folco)

On sort un peu du cadre du C, mais de mémoire les "if" ne sont pas les plus consommateurs de temps dans les programmes en Basic. La seule chose à vraiment éviter ce sont les goto (et pire, les goto avec indirections, mais je ne me souviens plus s'ils sont traités à part) qui provoquent une recherche dans l'intégralité du programme pour retrouver le label correspondant.

Mis à part ça, je ne sais pas trop... mais pour résoudre des équations je suppose que la grosse partie est traitée par solve() et autres fonctions Basic, et donc passer en C ne donnera, à mon avis, rien qui vaille le coup de consacrer du temps à une conversion.
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

6

Zephyr (./5) :
qui provoquent une recherche dans l'intégralité du programme pour retrouver le label correspondant.

Sur Casio, sûr que oui. Sur TI, c'est tokenisé à ma connaissance... o_O T'est sûr de toi ??

Une autre chose qui bouffe de la vitesse, c'est le fait d'appeler un programme ou une fonction externe que tu as écrite.

7

(cross aussi)

C'est vrai, ça risque de n'être que quelques dixièmes de secondes...

Mais c'est peut-être pour moi l'occasion de me lancer dans le C... j'ai toujours eu un peu peur de me frotter à sa syntaxe quelque peu obscure à mon goût. Jamais réussi à dépasser le basic, à part quelques infidélités en python.


Bah, je me lance, et je reviens demander de l'aide dans pas longtemps !

8

Bah, j'aurai ainsi l'occasion d'apprendre des choses, ça n'est jamais inutile.

9

Sur ce point-là, je ne peux que t'encourager. happy
Je te conseille GCC4TI pour coder et compiler : http://trac.godzil.net/gcc4ti/

10

Et en plus (ce n'est pas du tout pour lancer un troll TIGCC ou GCC4TI), je viens de tomber sur ce bout de doc :
Tags

enum Tags {...};

An enumeration to describe types of entries on the expression stack.

This enum is very large, as there are a lot of various entries. See top_estack for more info about how entries on the expression stack are organized. Here is a complete list of tags with their values in hexadecimal notation, along with their meaning written in RPN:

00 VAR_NAME_TAG variable name (with more than one letter): '\0' var_name '\0'
01 _VAR_Q_TAG variable q (but not used - 1B is used normally)
02 VAR_R_TAG variable r
03 VAR_S_TAG variable s
04 VAR_T_TAG variable t
[...]


ça ressemble foutrement à ce dont j'ai besoin, sans inventer un code tout pourri en basic.

Bon avant ça :

faire renvoyer qqch à mon programme C dans le Home, puis lui faire passer un paramètre et qu'il le renvoie dans le Home avec un calcul tout simple. Ca va déjà bien m'occuper.

Mais je vois que c'est bourré de RPN, ça va me plaire !

11

Regarde la documentation du header estack.h, tu devrais en avoir pas mal besoin. En tout cas, c'est dedans que tu trouveras les tags dont tu as parlé. smile

12

L'offset pour un Goto n'est pas calculé lors de la tokénisation (ce n'est même pas prévu dans le codage des tokens), c'est recherché dans le programme entier en temps d'exécution (alors que pour les boucles, un déplacement précalculé est prévu, même si le tokéniseur de AMS ne le calcule pas toujours (Tokens89 peut calculer tous les déplacements pour les boucles tongue)).
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

13

La programmation du CAS est beaucoup plus puissante, et bien sûr plus rapide, quand elle est faite en C (plutôt qu'avec "part").
La puissance vient du fait qu'on peut utiliser des fonctions de plus bas niveau, et donc utiliser des algos totalement différents. C'est ce que j'avais fait quand j'avais réimplémenté le Delta^2 d'Aitken de MathTools en C: utilisation de replace_top2_with_sum() plutôt que de créer une nouvelle liste et de la stocker dans une variable (ce que faisait la version BASIC).
avatar
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Co-admin de TI-Planet.

14

Je m'incline. happy

15

Donc ça veut dire que l'on pourrait réécrire en C la fonction solve() et gagner en vitesse ? Ou réécrire une fonction desolve(), parce que celle de la ti est lente et pas très efficace...

On peut donc dire que le calcul formel est plus puissant et plus rapide si on le programme en C ?

16

Non, le calcul formel de ta TI est déjà écrit en C. Par contre, si tu cherches de la vitesse, tu pourrais, au moins pour te renseigner, jeter un oeil sur le CAS de PedroM qui est 100 fois plus efficace.

17

Zephyr (./5) :
ce qu'il faut éviter ce sont les goto


Oup, mon explorer en est plein grin ##tisogni##
Folco (./6) :
Une autre chose qui bouffe de la vitesse, c'est le fait d'appeler un programme ou une fonction externe que tu as écrite.

J'confirme, j'ai codé un verrou par cryptage Varnier, c'est flippant comment c'est long d'exécuter une sous-routine alors que si tu mets direct le code ça va environ 2x plus vite ...

18

Folco (./16) :
Par contre, si tu cherches de la vitesse, tu pourrais, au moins pour te renseigner, jeter un oeil sur le CAS de PedroM qui est 100 fois plus efficace.



J'ai regardé PedRom.
J'utilise ma calculatrice pour le calcul formel, donc ça me semble difficile, à moins de tout recoder moi-même.

Et surtout, je n'ai rien vu au sujet du CAS dans PedRom, il n'y a pas grand chose d'implémenté. Ou alors j'ai loupé un gros truc.

19

Oui, t'as loupé un gros truc. grin T'as regardé récemment ? Regarde la niouze du 07/05/2008 sur cette page : t3
Et la version suivante de PedroM est sortie il y a une semaine, donc les choses sont encore améliorées. smile

20

Effectivement, c'est assez prometteur, c'est le moins qu'on puisse dire !

Mais PedroM ne fait pas fonctionner RPN, ni uview (et ne voyez pas là un reproche !), et je ne me vois pas vivre sans ces deux programmes (en tout cas, quand j'allume ma calculatrice).

Quoiqu'il en soit, cet embryon de CAS est tout à fait fascinant, et quelle rapidité comparé au CAS de TI.

Bon j'avoue que c'est autre chose que mes petits bricolages en Basic.

ca n'est clairement pas de mon niveau, mais je serai ravi de donner des suggestions de fonctions pour ce CAS (dirac, kroenecker, fonction porte... je suis sur les transformées de Fourier en ce moment).

Pour ne pas faire mon lourd et suggérer des choses qui ont déjà été demandées 1000 fois, où est-ce que l'on peut trouver la doc ou le todo de Maylib parce que je ne la vois pas là technic/archives/Librairies/Maylib/may-0.7.0.tar.bz2

Comme d'hab, c'est du bon boulot

21

ni uview (et ne voyez pas là un reproche !)

Ah tiens, c'est curieux.
Est-ce que quelqu'un sait ce qu'uView utilise, qui ne soit pas actuellement implémenté par PedroM ?
avatar
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Co-admin de TI-Planet.

22

La version à jour de MAYLIB n'est disponible que dans le répertoire src/lib de l'archive PedroM 0.82 (l'archive dans l'archive).
(Et il n'y a pas de fonction solve).
uview ne marche pas sous PedroM ????????

23

uview sur PedroM 0.82 : ROM CALL NOT AVAILABLE (plein écran, blanc sur fond noir pour le texte)
RPN sur PedroM 0.82 : error : invalid command (dans une fenêtre)

(sur TiEMu)

***

merci pour l'adresse de MAYLIB

24

et du LaTeX, quel bonheur !

25

Invalid command pour RPN, c'est normal.
uView, c'est plus surprenant. En traçant dans TIEmu, je vois qu'uView utilise des relocations style kernel (jsr xxx.l vers la routine qui déclenche l'erreur), ce qui va rendre le debugging plus difficile :'(
[EDIT: c'est dans une fonction qui exécute HeapAllocPtr(2*LCD_SIZE) puis deux memcpy(dest, LCD_SIZE, src), avant de faire un jsr xxx.l vers la routine qui déclenche l'erreur. On n'a pas les sources d'uView.]
avatar
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Co-admin de TI-Planet.

26

Pour ma culture, pourquoi c'est normal pour RPN ?

27

Parce que j'imagine qu'il utilise des fonctions du Ti-Basic sur l'estack, non impémentées dans PedroM.

28

Bah ça règle le problème.

Je n'ai plus qu'à coder le même moi-même roll .

29

uview utilise le romcall TIOS_EV_getAppID equ $454 qui manque.
Pourquoi c'est utilisé, alors là... Mais on digresse.
cidrolin (./26) :
Pour ma culture, pourquoi c'est normal pour RPN ?


RPN utilise à fond le format des expressions mathématiques. Ce format n'est que très superficiellement supporté.