Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.54/35: Рейтинг темы: голосов - 35, средняя оценка - 4.54
0 / 0 / 0
Регистрация: 03.04.2013
Сообщений: 28

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

14.06.2014, 21:24. Показов 8010. Ответов 60
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужен исходный код функции sinh() и cosh() из библиотеки math.h. Искал в библиотеке - не нашел.
Задача: написать программу которая будет вычислять гиперболический косинус и синус. НЕ ИСПОЛЬЗУЯ sinh() и cosh(), а также не использовать функции ( exp (x) + exp (-x) ) / 2 и ( exp (x) - exp (-x) ) / 2. За помощь буду крайне благодарен и отблагодарю!
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.06.2014, 21:24
Ответы с готовыми решениями:

Как выглядит исходный код функции sqrt стандартной библиотеки math.h?
Здраствуйте. Мне надо исходный код функции sqrt стандартной библиотеки math.h . В интернете не могу найти понятный пример, а библиотеки...

Нужен исходный код, исходник функции strcat()
Мне нужен исходный код,исходник функции strcat(); , которая в string.h библиотеке. Помогите найти,а то я порылся в папке codeblocks-а и...

Исходный код библиотеки
Здравствуйте Подскажите, есть ли какая-либо возможность получить исходный код библиотеки .lib на с++ 3.11? И если да, то сколько это...

60
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
14.06.2014, 21:38
А почему ты считаешь, что там не используется экспонента?
В твоём случае можно использовать разложение в ряд, суммировать члены ряда. http://ru.wikipedia.org/wiki/%... A%F6%E8%E8
0
0 / 0 / 0
Регистрация: 03.04.2013
Сообщений: 28
14.06.2014, 21:40  [ТС]
Я знаю что там используется экспонента, но я говорю чтобы функцию exp() не использовали. И понимаю, что надо использовать ряды и т.д., но сам этого сделать не могу (знаний не хватает). Надеюсь на вашу помощь!
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
14.06.2014, 21:41
Я же тебе дал ссылку. Там приведены формулы рядов. Делай цикл и суммируй до нужной точности.
0
0 / 0 / 0
Регистрация: 03.04.2013
Сообщений: 28
14.06.2014, 22:08  [ТС]
Я же написал что знаний не хватит
0
0 / 0 / 0
Регистрация: 07.11.2012
Сообщений: 6
14.06.2014, 22:09
GOLDProFA, так подтяни мат. анализ
0
0 / 0 / 0
Регистрация: 03.04.2013
Сообщений: 28
14.06.2014, 22:10  [ТС]
Легко сказать. Блесни умом и помоги сделать, отблагодарю
0
0 / 0 / 0
Регистрация: 07.11.2012
Сообщений: 6
14.06.2014, 22:12
GOLDProFA, я бы помог, да сейчас своих проектов много, и сессия начинается
0
0 / 0 / 0
Регистрация: 03.04.2013
Сообщений: 28
14.06.2014, 22:16  [ТС]
Удачи все сдать. Может кто еще поможет?
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,870
14.06.2014, 22:18
Цитата Сообщение от GOLDProFA Посмотреть сообщение
Нужен исходный код функции sinh() и cosh() из библиотеки math.h.
легко
компилируешь простейшую программу с этой функцией

потом натравливаешь на неё дизасемблер, и анализируешь код
1
0 / 0 / 0
Регистрация: 03.04.2013
Сообщений: 28
14.06.2014, 22:19  [ТС]
Я не знаю как это сделать. Может Вы поможете?
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
14.06.2014, 22:31
Ты шутишь? Что ему ассемблерный код даст? Ряд простейший. Тут куча тем про ряды была.
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,870
14.06.2014, 22:52
Цитата Сообщение от nmcf Посмотреть сообщение
Ты шутишь?
отнюдь
Обратный инженеринг слышал?
Цитата Сообщение от nmcf Посмотреть сообщение
Что ему ассемблерный код даст?
Ну ему может ничего
а нормальному хакеру многое
но думаю что нормальный хакер не будет это дизасемблировать, он и так знает алгоритмы
но ведь надо же с чегото начинать
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
14.06.2014, 22:57
Разумеется слышал и делал. Только ты предлагаешь усложнение задачи, прощу суммировать ряд, чем копаться в ассемблере. И как он потом объяснять алгоритм будет?
0
0 / 0 / 0
Регистрация: 03.04.2013
Сообщений: 28
14.06.2014, 23:12  [ТС]
Так вы можете сделать? Не пойму при чем тут ассемблер
0
20 / 20 / 3
Регистрация: 14.06.2012
Сообщений: 95
14.06.2014, 23:46
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() там есть. Повторюсь - ряды и только ряды. На просторах интернета даже готовый код есть по первой ссылке гугля. Надеюсь помог, удачи
0
0 / 0 / 0
Регистрация: 03.04.2013
Сообщений: 28
15.06.2014, 00:17  [ТС]
Нету готового кода, я не нашел. Как это в си перевести?
0
Модератор
 Аватар для vxg
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,456
15.06.2014, 08:47
C++
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
#define EPS 0.001
double sh(const double &x)
{
    double res = 0;
 
    double x_prod = x;
    int n_prod = 1;
 
    double x2 = x * x;
    double tmp1 = 2;
    double tmp2 = 3;
 
    while (true)
    {
        double d = x_prod / n_prod;
 
        if (d < EPS) break;
 
        res += d;
 
        x_prod *= x2;
        n_prod *= tmp1 * tmp2;
 
        tmp1 += 2;
        tmp2 += 2;
    }
 
    return res;
}
double ch(const double &x)
{
    double res = 0;
 
    double x_prod = 1;
    int n_prod = 1;
 
    double x2 = x * x;
    double tmp1 = 1;
    double tmp2 = 2;
 
    while (true)
    {
        double d = x_prod / n_prod;
 
        if (d < EPS) break;
 
        res += d;
 
        x_prod *= x2;
        n_prod *= tmp1 * tmp2;
 
        tmp1 += 2;
        tmp2 += 2;
    }
 
    return res;
}
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
15.06.2014, 10:34
http://www.netlib.org/fdlibm/
1
0 / 0 / 0
Регистрация: 03.04.2013
Сообщений: 28
15.06.2014, 21:33  [ТС]
Не работает, выдает ошибки.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.06.2014, 21:33
Помогаю со студенческими работами здесь

Как использовать функции System.Math без указания библиотеки
Необходимо писать большие формулы, включающие синусы и косинусы. Написал-забыл не прокатит, код выполняется динамически, так как нужен ввод...

Как засунуть исходный код библиотеки DotNetZip в проект?
Слышал, что можно засунуть исходный код библиотеки в проект дабы не таскать вместе с exe файлом dll. Как это сделать с DotNetZip? Исходники...

нужен исходный код
Доброго времени суток! Нужна помощь: срочно нужен исходный код любого приложения под симбиан. Выручите, если не сложно.

Нужно ли копировать весь исходный код библиотеки в папку со своей программой?
Итак, я скомпилировал библиотеку Box2d, получил файл libBox2D.a, и есть отдельная папка с исходниками библиотеки которую я компилил. Теперь...

Нужен исходный код будильника
Помогите пожалуйста если у кого есть исходник или код будильника на JAVA подкинте пожалуйста, заранее спасибо Добавлено через 6 минут ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru