Prog en assembleur

info fst -  
Pacorabanix Messages postés 4122 Date d'inscription   Statut Membre Dernière intervention   -
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
Configuration: Windows XP
Safari 532.0

1 réponse

  1. Pacorabanix Messages postés 4122 Date d'inscription   Statut Membre Dernière intervention   663
     
    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