Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler: математика, вычисления
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
un1acker
0 / 0 / 0
Регистрация: 07.03.2012
Сообщений: 22
1

Реализовать вычисление гиперболического тангенса с помощью fpu

23.05.2014, 20:29. Просмотров 736. Ответов 4
Метки нет (Все метки)

Здравствуйте мне необходимо реализовать вычисление гиперболического тангенса с помощью fpu. Нашел в нете код но никак не понятен смысл выполнения некоторых команд.
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
                .386
_TEXT           segment use32 para public 'CODE'
                public  _asmth
                public  __CItanh
source equ qword ptr [ebp+8]
result equ qword ptr [ebp+12]
 
_asmth          proc    near
                assume  cs:_TEXT
                push    ebp
                mov     ebp,esp
                fld     qword ptr [ebp+8]       ; загрузка в стек
                fld     st                      ; дублируем
                fadd                            ; 2*x
                fldl2e                          ; log по основан 2 от (e)
                fmulp   st(1),st                ; 2x * log base 2(e)
                fst     st(1)                   ; copy
                frndint                         ; округлен до целого
                fsub    st(1),st                ; вычитание
                fxch                            ; обмен st, st(1)
                f2xm1                           ; вычисление 2 в степени (x - 1)
                fld1                            ; загрузка единицы
                fadd                            ; сложение;2 to the x
                fscale                          ; Scale by power of 2
                fstp    st(1)                   ; Set new stack top and pop
                fld1                            ; загрузка единицы
                fadd                            ; вычисление exp(2*x)+1
                fld1                            ; загрузка единицы
                fld1                            ; загрузка единицы
                fadd                            ; Set divisor to 2
                fdivr                           ; Compute 2/(exp(2*x)+1)
                fld1                            ; загрузка единицы
                fsubr                           ; вычислен th
        ;fstp qword ptr [ebp+12];result
                pop     ebp                     ; Restore register bp
                ret
_asmth          endp
 
__CItanh        proc    near
                assume  cs:_TEXT
                sub     esp,8                   ; Allocate stack space for x
                fstp    qword ptr [esp]         ; Copy x onto stack
                call    _asmth                  ; Call tanh
                add     esp,8                   ; Remove x from stack
                ret
__CItanh        endp
 
_TEXT           ends                            ;End of segment
                end                             ;End of module
Собственно мне не ясно зачем мы выполняем округление и для чего проводим масштабирование. Подскажите кому не сложно
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.05.2014, 20:29
Ответы с готовыми решениями:

Сопроцессор: вычисление гиперболического тангенса
помогите пожалуйста разобраться с передачей результатов из ассемблера в сишник....

Вычисление факториала на FPU
Добрый день. Помогите разобраться с вычислением факториала на FPU. include...

Вычисление выражения по формуле с FPU
Входные данные необходимо вводить с клавиатуры; результат должен быть выведен...

Задача : Вычисление памяти с помощью int 15h
Здравствуйте, такая проблема: Необходимо вычислить объем оперативной памяти....

Вычисление кусочной функции с помощью ассемблерной вставки в код на Pascal
Итак суть задания. В соответствии с заданием, вычисления у1 и у2...

4
VTsaregorodtsev
572 / 520 / 77
Регистрация: 19.02.2010
Сообщений: 1,902
25.05.2014, 22:18 2
Длинноватый код. У меня - покороче:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
        fld     qword ptr[esp+04h]
        fldl2e
        fmul
        fld st(0)
        frndint
        fsub    st(1), st(0)
        fxch    st(1)
        f2xm1
        fld1
        fadd
        fscale
        fmul    st(0), st(0)
        fst     st(1)
        fld1
        fadd    st(1), st(0)
        fsubp   st(2), st(0)
        fdivp   st(1), st(0)
        ret
0
Mikl___
Автор FAQ
13303 / 6376 / 629
Регистрация: 11.11.2010
Сообщений: 11,535
26.05.2014, 05:47 3
Цитата Сообщение от un1acker Посмотреть сообщение
Нашел в нете код но никак не понятен смысл выполнения некоторых команд.
http://www.cyberforum.ru/cgi-bin/latex.cgi?\operatorname{Arcth}x=\ln\left(\frac{\sqrt{x^2-1}}{x-1}\right)=\frac{1}{2}\ln\left(\frac{x+1}{x-1}\right)
0
VTsaregorodtsev
572 / 520 / 77
Регистрация: 19.02.2010
Сообщений: 1,902
01.06.2014, 21:46 4
Mikl___ Арктангенс и гиперболический тангенс (tanh) - это совсем разные вещи
1
Mikl___
Автор FAQ
13303 / 6376 / 629
Регистрация: 11.11.2010
Сообщений: 11,535
02.06.2014, 08:25 5
VTsaregorodtsev,
извиняюсь, поторопился
http://www.cyberforum.ru/cgi-bin/latex.cgi?\operatorname{th}x=\frac{\operatorname{sh}x}{\operatorname{ch}x} = \frac {e^x - e^{-x}} {e^x + e^{-x}} = \frac{e^{2x} - 1} {e^{2x} + 1}
0
02.06.2014, 08:25
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.06.2014, 08:25

FPU
Привет дело такое. Не могу понять как рабатают FPU пример: mov dword ptr...

Функция гиперболического тангенса tanh(x)
Всем добрый день! Если взять два числа A и B и сложить их, то процессор...

Вычисление гиперболического косинуса через разложение в ряд Тейлора с помощью рекурсивной процедуры
Мне нужно написать рекурсию на примере Ряда Тэйлора на гиперболический косинус...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru