Prog en assembleur

Fermé
info fst - 20 nov. 2009 à 21:24
Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 - 20 nov. 2009 à 22:08
Bonsoir,
je suis une débutante en assembleur,je suis en train de formuler un programme et j'ai besoin d'effectuer une racine carrée,si quelqu'un peut m'aider svp. Merci d'avance
A voir également:

1 réponse

Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 661
20 nov. 2009 à 22:08
Je ne connais rien à l'assembleur, donc je ne peux pas t'aier à coder.

Mais tu as plusieurs options :

1) peut-être la plus simple, faire un développement limité de la fonction racine (comme au lycée normalement, c'est au programme il me semble). Plus tu fais ton développement à un ordre grand, plus ta réponse sera précise.

Par exemple, tu développes depuis 1

racine(1+h) =environ racine(1) + dérivée de racine (1) * h + dérivée seconde de racine (1) / 2 * h^2 + dérivée troisième de racine(1) / 6 * h^3

(ici c'est un développement d'ordre 3)

Donc si tu as par exemple la racine de x à calculer, tu poses h=x-1 et tu appliques cette formule.
Les dérivées sont juste des nombres à calculer sur papier avant de faire ton programme.

dérivée de racine (x)= 1/(2*racine de x), donc dérivée de racine (1) c'est 0.5.
dérivée deuxième de racine (x) = -1/(4*x*racine(x)) si je ne me trompe pas, c-à-d dérivée deuxième de racine (1) = -0.25



2) Sinon une autre possibilité est de faire la méthode de la bisection, je ne sais pas trop ce que tu sais faire ou pas en assembleur.

détail : voici la méthode de la bissection. On cherche le zéro d'une fonction. Pour trouver la racine de a, on cherche le zéro de la fonction x^2 - a.

Tu prends deux nombres de départ pour commencer à chercher. tu prendras 0 et a, c'est le plus simple. On sait que la réponse est entre les deux.

Ensuite :
BorneInf = 0
Borne Sup=a
X = a/2 (le milieu entre 0 et a)
Tant que X^2-a n'est pas "proche de zéro" (tolérance à définir par toi même, par exemple 0.0001)
  regarder le signe de X. S'il est positif, le X remplace borneSup. Sinon le X remplace BorneInf
  remplacer X par la moyenne entre BorneInf et BorneSup (BorneInf + BorneSup)/2
Boucler tant que

ceci est l'algorithme, je ne sais pas si tu connais assez l'assembleur pour le traduire.

Ce ne sont que des possibilités parmi d'autres, il y'en a beaucoup!


EDIT: en fait pour la méthode de la bisection, ma méthode n'est pas correcte si a est entre 0 et 1. si a est entre 0 et 1, il faut prendre comme borneInf : a et comme borneSup : 1. Sinon, si le nombre a est plus grand que 1 tu peux prendre borneInf = 1 et borneSup = a.
0