Извлечь корень

Тема в разделе "WASM.BEGINNERS", создана пользователем Xrestofel, 30 сен 2005.

  1. Xrestofel

    Xrestofel New Member

    Публикаций:
    0
    Регистрация:
    30 сен 2005
    Сообщения:
    2
    Адрес:
    Ukraine
    Как извлечь кубический корень из некоторог выражения, не используя разложения в ряд Тейлора?
     
  2. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    ?! удивляешь ;)

    Для любых степеней:

    x<sup>y</sup>=e<sup>y*ln(x)</sup>=2<sup>y*log2(x)</sup>

    Поэтому юзай функцию типа Power (или Pow или т.п.), которая наверняка есть в любом HLL компиляторе.

    Стандартная упрощенная реализация возведения в степень на асме выглядит примерно так:
    Код (Text):
    1.         fld qword [y]
    2.         fld qword [x]
    3.         fyl2x           ;z=y*log2(x)
    4.         fld     st0
    5.         frndint         ;i = целая часть z
    6.         fxch    st1     ;меняем местами: st0 = z, st1 = i
    7.         fsub    st0,st1 ;f = z - i - дробная часть
    8.         f2xm1           ;z = 2^f-1
    9.         fld1
    10.         faddp           ;z = 2^f
    11.         fscale          ;result = z * 2**i
    12.         fstp qword [z]
    13.         fstp st0
    Реализация упрощенная - предполагает, что х > 0, иначе будет FPU-exception при fyl2x. Поэтому нужно добавить проверочку на x > 0.
     
  3. Xrestofel

    Xrestofel New Member

    Публикаций:
    0
    Регистрация:
    30 сен 2005
    Сообщения:
    2
    Адрес:
    Ukraine
    Спасибо, сразу не сообразил!