Форум программистов, компьютерный форум CyberForum.ru

Нужен исходный код функции sinh() и cosh() из библиотеки math.h - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Бинарное дерево через ооп http://www.cyberforum.ru/cpp-beginners/thread1208069.html
Дана последовательность из N целых чисел. Записать значения элементов последовательности упорядоченными по возрастанию в виде двоичного дерева. Разработать методы объекта дерева: Определение числа узлов дерева Определение числа листьев Вывод результатов обработки
C++ C++ ошибка "Cannot convert 'char *' to char" void t(char *txt){ txt = "1"; } void main(){ clrscr(); char text = "0"; http://www.cyberforum.ru/cpp-beginners/thread1208064.html
Обработка текстовых строк. Напечатать все слова, содержащие хотя бы одну цифру C++
Напечатать все слова, содержащие хотя бы одну цифру.
C++ Найти суммы нечетных положительных элементов каждой строки матрицы
Найти суммы нечетных положительных элементов каждой строки матрицы а(5,7) и сохранить их в одномерном массиве b.
C++ Как получить исходные данные из 10-й строки файла? http://www.cyberforum.ru/cpp-beginners/thread1208045.html
При написании консольного приложения на visual-studio, возникла проблема, мне надо получить исходные данные из 10 строки файла text1.txt, для дальнейшего их анализа. Кто-нибудь может объяснить чайнику, как получить исходные данные из 10-й строки файла?
C++ Пару задач на разные темы Я плохо знаю С++, поэтому прошу помочь разобраться с парой задач. Не изучал этих тем. Вот что получилось у меня.. 1. Даны натуральные числа a, b (a<=b). В диапазоне вывести все числа в записи которых имеется цифра 3 (с помощью функций). //--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include<stdio.h> #include<conio.h>... подробнее

Показать сообщение отдельно
IIARTEMII
20 / 20 / 3
Регистрация: 14.06.2012
Сообщений: 95
Завершенные тесты: 1
14.06.2014, 23:46     Нужен исходный код функции sinh() и cosh() из библиотеки math.h
GOLDProFA, лучшим и наипростейшим решением твоей задачи являются ряды, о которых уже написали выше, но если уж так прям хочется знать исходник, то он есть только в одном варианте:
Насколько я понял, приведённый ниже код - это Borland'овский TASM.
sinh:
Кликните здесь для просмотра всего текста

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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
        include RULES.ASI
        include _MATH.INC
 
Header@
 
Data_Seg@
 
ExtSym@         _huge_dble, qword, cdecl
HUGE_VAL        equ     _huge_dble@
 
Data_EndS@
 
Code_Seg@
 
Func@   sinh, _EXPFUNC, _RTLENTRY, <double x>
Locals@ <double temp>
 
        Link@   ebx
 
        FLD1
        mov     ax, 7FFFh
        FCHS                    ; TOS = -1.0, used in FSCALE later
        mov     dx, x [6]
        and     ax, dx          ; select exponent and most signif. bits
 
        FLD     x.double
        cmp     ax, 4086h
        jnb     sinh_tooBig     ; exp (+-710.475) is the limit
 
        FABS
        cmp     ax, 3FD6h
        jb      sinh_small
 
sinh_justFits:
        f87     Exp
 
        FLD1
        FDIV    st, st(1)       ; Exp (-x)
        FSUBP   st(1), st
        FSCALE                  ; sinh (x) = (exp(x) - exp(-x)) / 2
 
sinh_end:
        fstp_st1                ; discard the -1
 
; change sign if original argument was negative
 
        test    dh, 80h
        jz      sinh_end2
        FCHS
sinh_end2:
        Unlink@ ebx
        Return@
 
sinh_tooBig:
        ja      sinh_over
        cmp     W0 (x [4]), 33CEh
        jb      sinh_justFits
 
sinh_over:
        FSTP    ST(0)                   ; discard ST and ST(1)
        FSTP    ST(0)
 
;       return  __matherr (OVERFLOW, "sinh", &x, NULL,
;                                                (_DX & 0x8000) ? - HUGE_VAL : HUGE_VAL);
 
        FLD     HUGE_VAL.double
        test    dh, 80H
        jz      sinh_temp
        FCHS
sinh_temp:
        FSTP    temp.double
 
        matherr OVERFLOW, sinh, x, NULL, temp
        jmp     sinh_end2
 
sinh_small:
        cmp     ax, 3DE0h
        jb      sinh_end                ; x tiny, return x
 
        FLDL2E
        FMUL
        F2XM1
; TOS = y = exp(x) - 1
        FLD1
        FADD    st(0),st(1)
; stack = 1+y,y,-1
        FDIVR   st(0),st(1)
        FADD
        FSCALE
        jmp     sinh_end;
 
EndFunc@ sinh
 
Code_EndS@
        end


cosh:
Кликните здесь для просмотра всего текста

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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
        include RULES.ASI
        include _MATH.INC
 
Header@
 
Data_Seg@
 
ExtSym@         _huge_dble, qword, cdecl
HUGE_VAL        equ     _huge_dble@
 
Data_EndS@
Code_Seg@
Func@   cosh, _EXPFUNC, _RTLENTRY, <double x>
 
        Link@   ebx
 
        FLD1
        mov     ax, 7FFFh
        FCHS                    ; TOS = -1.0
        and     ax, x [6]       ; select exponent and most signif. bits
 
        FLD     DOUBLE (x)
        cmp     ax, 4086h
        jnb     cosh_tooBig     ; exp (+-710.475) considered too large
        cmp     ax, 3F20h
        jb      cosh_tiny
cosh_justFits:
 
        f87     Exp
 
        FLD1
        FDIV    st, st(1)       ; Exp (-x)
        FADDP   st(1), st
        FSCALE                  ; cosh (x) = (exp(x) + exp(-x)) / 2
        fstp_st1
 
cosh_end:
        Unlink@ ebx
        Return@
 
cosh_tooBig:
        ja      cosh_over
        cmp     W0 (x [4]), 033CEh
        jb      cosh_justFits
 
cosh_over:
 
        FSTP    ST(0)                   ; pop two items off the stack
        FSTP    ST(0)
 
;       return __matherr (OVERFLOW, "cosh", &x, NULL, HUGE_VAL);
 
        matherr OVERFLOW, cosh, x, NULL, HUGE_VAL
        jmp     short   cosh_end
 
;  cosh is more accurately calculated by the polynomial
;
;        (1 + x^2/2)
;
;  when x is tiny (|x| < 2^-13).
 
cosh_tiny:
        FMUL    ST(0), ST(0)
        FSCALE                  ; divide by 2
        FSUBRP  ST(1), ST(0)    ; +1 == - (-1)
        jmp     short   cosh_end
 
EndFunc@ cosh
Code_EndS@
        end


Как бы exp() там есть. Повторюсь - ряды и только ряды. На просторах интернета даже готовый код есть по первой ссылке гугля. Надеюсь помог, удачи
 
Текущее время: 05:00. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru