Возведение с степень

Тема в разделе "WASM.ASSEMBLER", создана пользователем dr_dred, 20 май 2005.

Статус темы:
Закрыта.
  1. dr_dred

    dr_dred Сергей

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    301
    Адрес:
    Russia
    Раз уж речь зашла о FPU, то подскажите мне как возвести двойку в целую степень не используя fscale.
     
  2. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229
    Что-то последнее время всем понадобилось возвадить числа в степени. Ответ на твой опрос уже есть в существующих темах, тем не менее. Смотри f2xm1, все тривиально.
     
  3. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    f2xm1 вроде как возводит в степень от -1.0 до +1.0



    Если нужно быстрее fscale, то - целочисленные методы с последующей загрузкой в FPU (варианты есть у Агнера Фога в pentopt.pdf)
     
  4. dr_dred

    dr_dred Сергей

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    301
    Адрес:
    Russia
    По теме "Скорость+оптимизация" накатал процедурку:



    QPower proc lpValue,lpPower,lpRes

    <ol type=1>finit

    mov eax,lpPower

    fld qword ptr [eax]

    fchs

    fld1

    mov eax,lpX

    fld qword ptr [eax]

    fdivp st(1),st

    fyl2x

    fld st

    frndint

    fsub st(1),st

    fxch st(1)

    f2xm1

    fld1

    fadd

    fscale

    fstp st(1)

    mov eax,lpRes

    fst qword ptr [eax]

    ret</ol>

    QPower endp



    Все бы хорошо, только вот fscale уж очень долго работает - аж половину времени работы всей процедуры. Вот я и думаю, как его заменить. Нет ли у fpu что-нибудь типа shl?



    NoName, что ты там говорил про целочисленные методы с последующей загрузкой в FPU? Может пример приведешь, или выписку сделаешь?
     
  5. Sonic

    Sonic New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2004
    Сообщения:
    77
    Адрес:
    Днепропетровск
    QPower proc lpX,lpPower,lpRes

    fninit

    mov ecx,lpPower

    mov ecx,[ecx]

    dec ecx

    mov eax,lpX

    fld qword ptr [eax]

    fld qword ptr [eax]

    p:

    fmul st,st(1)

    dec ecx

    jnz p

    mov eax,lpRes

    fst qword ptr [eax]

    ret

    QPower endp



    У меня это посчитало 2<sup>32</sup> быстрее(чуть-чуть) чем твой вариант 2<sup>3</sup>, да и обычнычный mul

    должен быть быстрее, а результат всегда можно запихнуть

    в регистр fpu
     
  6. leo

    leo Active Member

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

    > "что ты там говорил про целочисленные методы с последующей загрузкой в FPU?"



    Самому слабо поискать ?

    На тебе Агнер Фог на русском в переводе Aquila.

    Раздел 26.10 FSCALE и экпоненциальная функция (все процессоры). А то вдруг не найдешь ;)
     
Статус темы:
Закрыта.