0 / 0 / 0
Регистрация: 07.03.2012
Сообщений: 22
1

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

23.05.2014, 20:29. Показов 1360. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.05.2014, 20:29
Ответы с готовыми решениями:

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

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

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

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

4
1404 / 1328 / 227
Регистрация: 19.02.2010
Сообщений: 3,768
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
Ушел с форума
Автор FAQ
16161 / 7499 / 1031
Регистрация: 11.11.2010
Сообщений: 13,498
26.05.2014, 05:47 3
Цитата Сообщение от un1acker Посмотреть сообщение
Нашел в нете код но никак не понятен смысл выполнения некоторых команд.
https://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
1404 / 1328 / 227
Регистрация: 19.02.2010
Сообщений: 3,768
01.06.2014, 21:46 4
Mikl___ Арктангенс и гиперболический тангенс (tanh) - это совсем разные вещи
1
Ушел с форума
Автор FAQ
16161 / 7499 / 1031
Регистрация: 11.11.2010
Сообщений: 13,498
02.06.2014, 08:25 5
VTsaregorodtsev,
извиняюсь, поторопился
https://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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.06.2014, 08:25
Помогаю со студенческими работами здесь

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

Вычисление гиперболического синуса
Помогите пожалуйста, абсолютно не могу понять..

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

Вычисление тангенса
HELP! Не могу разобраться с процедурами. Написал процедуру для вычисления тангенса. при вызове...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru