J'ai inventé hier soir un algorithme de calcul de racines carrées très rapide.
Il ne travaille que sur des entiers, à aucun moment il ne fait appel aux floats.
Le résultat est donc la valeur tronquée de la racine. Par exemple R(2562) = 50.616 -> 50.
Il n'utilise que de l'algorithmie pure : pas de fonction du TIOS ou autre...
En TI-Basic :
- racine de 320, 0.25 seconde !
- racine de 1466234, 0.5 seconde !!!
... en TI-Basic !
J'insiste sur le fait que le résuiltat est hyper précis : il est juste tronqué à l'unité.
Voilà, je voudrais savoir si y'a plus rapide ou pas.
[edit]Edité par Thibaut le 28-06-2001 à 15:46:10[/edit]

Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 :
www.ti-fr.com.
Quelques idées personnelles
ici.
TiMad Le 11/07/2001 à 19:19 hyper precis.. ca serai mieux un arondi..
XLib v1.00 Powerrrrrrrrrrrrrrrrrrrr!
TiMad Le 11/07/2001 à 19:19 lol.. en ti basic... avec aucune fonction tios...
je vais voir ca...
XLib v1.00 Powerrrrrrrrrrrrrrrrrrrr!
<< En fait je vais l'implémenter dans un prog ASM, mais avant j'ai quelques trucs à optimiser. On verra ce que ça donne >>
Je décode : je vais faire quelques optimisations, puis je le traduit en ASM. Le défi consiste donc à programmer une routine d'extraction de racines carrées en ASM.

Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 :
www.ti-fr.com.
Quelques idées personnelles
ici.
paxal Le 11/07/2001 à 19:19 Sur des Words, ca devrait suffir.
Moi mon algo il est en sqrt(n).
On pourrait l'améliorer en ln(n)/ln(100)*sqrt(100) si mes souvenirs sont exacts.
PS : c'est sans désactiver les interruptions.

Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 :
www.ti-fr.com.
Quelques idées personnelles
ici.
paxal Le 11/07/2001 à 19:19 T'utilises quel alforithme? La soustraction de nombres impairs?
Un algorithme O(1+ln(n)) (ou "en 1+ln(n)") signifie que le temps pris pour le calcul de la racine carrée de n est proportionnel à 1+ln(n). Cela ne veut pas dire forcément qu'il sera plus rapide qu'un algorithme O(n) (tout dépend du facteur de proportionnalité), mais on peut dire à 100% qu'il le sera pour des nombres suffisament grands (en les supposant représentables par la machine) à cause des propriétés mathématiques des fonctions logarithmes.
On peut aussi calculer le facteur de proportionnalité en cycles par unité ou le mesurer en secondes par unité pour ainsi définir de manière plus précise la vitesse de l'algorithme.
[edit]Edité par Kevin Kofler le 29-06-2001 à 18:34:47[/edit]
Pour des algorithmes rapides, je sais qu'un algorithme rapide en virgule flottante est de ramener le nombre à un nombre compris entre 0,5 et 1 (en divisant et multipliant par des puissances de 2) et d'utiliser une approximation polynomiale (par exemple un développement limité ou une régression), suivie de l'algorithme de Newton. Le problème est ici le fait que TI utilise des nombres à virgule flottante BCD, moins adaptés à la multiplication et à la division par 2 que les nombres à virgule flottante IEEE.
paxal Le 11/07/2001 à 19:19 Thibault: tu crois que la division par R est plus rapide que ma méthode?
Je n'en sait rien, mais ce n'est pas cet algo que j'utilise...

Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 :
www.ti-fr.com.
Quelques idées personnelles
ici.
Vous devez mesurer le temps d'exécution toutes interruptions activées. Ca serait quand même beaucoup plus precis si le bench se faisez sans ints (surtout qu'elles changent parfois d'une version d'AMS à un autre).
paxal Le 11/07/2001 à 19:19 Bah on teste l'algo sur kels nombres?
for (a=0; a<1500; a++) square_root (rand (0xFFFFFFFF)); ?
paxal Le 11/07/2001 à 19:19 Bah non, le rand va me prendre du temps...
bah si on prend tous le même prog qui test l'algo (donc le même rand), c bon.