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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.65
GOLDProFA
0 / 0 / 0
Регистрация: 03.04.2013
Сообщений: 28
#1

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

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

Нужен исходный код функции sinh() и cosh() из библиотеки math.h. Искал в библиотеке - не нашел.
Задача: написать программу которая будет вычислять гиперболический косинус и синус. НЕ ИСПОЛЬЗУЯ sinh() и cosh(), а также не использовать функции ( exp (x) + exp (-x) ) / 2 и ( exp (x) - exp (-x) ) / 2. За помощь буду крайне благодарен и отблагодарю!
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.06.2014, 21:24
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Нужен исходный код функции sinh() и cosh() из библиотеки math.h (C++):

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

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

Вычисление функции sinh разложением в ряд Тейлора - C++
Добрый день, помогите составить блок-схему по задаче, или хотя бы подскажите где можно посмотреть аналогичные примеры. Данная задача...

Реализация функций из библиотеки math.h - C++
Нужно написать прогу реализующая 4 функции из библиотеки math.h с помощь классов!

Где находятся стандартные библиотеки c++ типа <math.h> - C++
Здравствуйте, нужна информация: куда устанавливаются и где можно откопать стандартные библиотеки c++, я использую среду qt, компилятор...

записать формулу при помощи библиотеки math.h - C++
Помогите пожалуйста , для примера записать формулу при помощи math.h желательно обе , можно даже просто строку как она записывается в с++

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
IIARTEMII
20 / 20 / 3
Регистрация: 14.06.2012
Сообщений: 95
Завершенные тесты: 1
14.06.2014, 23:46 #16
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() там есть. Повторюсь - ряды и только ряды. На просторах интернета даже готовый код есть по первой ссылке гугля. Надеюсь помог, удачи
GOLDProFA
0 / 0 / 0
Регистрация: 03.04.2013
Сообщений: 28
15.06.2014, 00:17  [ТС] #17
Нету готового кода, я не нашел. Как это в си перевести?
vxg
Модератор
3157 / 1959 / 218
Регистрация: 13.01.2012
Сообщений: 7,493
15.06.2014, 08:47 #18
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;
}
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
15.06.2014, 10:34 #19
http://www.netlib.org/fdlibm/
GOLDProFA
0 / 0 / 0
Регистрация: 03.04.2013
Сообщений: 28
15.06.2014, 21:33  [ТС] #20
Не работает, выдает ошибки.
vxg
Модератор
3157 / 1959 / 218
Регистрация: 13.01.2012
Сообщений: 7,493
16.06.2014, 18:06 #21
Цитата Сообщение от GOLDProFA Посмотреть сообщение
Не работает, выдает ошибки.
что не работает? какие ошибки? код который я привел проверен
Tulosba
16.06.2014, 18:27
  #22

Не по теме:

Цитата Сообщение от vxg Посмотреть сообщение
что не работает?
ТС не работает .

GOLDProFA
0 / 0 / 0
Регистрация: 03.04.2013
Сообщений: 28
16.06.2014, 18:36  [ТС] #23
Скриншот ошибки
vxg
Модератор
3157 / 1959 / 218
Регистрация: 13.01.2012
Сообщений: 7,493
16.06.2014, 20:38 #24
Цитата Сообщение от GOLDProFA Посмотреть сообщение
Скриншот ошибки
что бы убрать первые два предупреждения - поменяйте
C++
1
2
double tmp1...
double tmp2...
на
C++
1
2
int tmp1...
int tmp2...
а остальные ошибки - это вы проект в VS как-то не так создали. не может он у вас main найти. колеса надо протереть. как именно - не в курсе. в VS не работаю и данная ошибка лично для меня пример маразма создателей среды преднамеренного (если они требуют что бы человек что то там делал в настройках что бы их среда увидела main) или косвенного (такой организации процесса создания проекта когда человек ошибочно выбирает не то или забывает выбрать что-то)
GOLDProFA
0 / 0 / 0
Регистрация: 03.04.2013
Сообщений: 28
16.06.2014, 20:42  [ТС] #25
Если не VS, то что мне использовать?
ValeryS
Модератор
6556 / 5022 / 464
Регистрация: 14.02.2011
Сообщений: 16,763
16.06.2014, 20:46 #26
Цитата Сообщение от vxg Посмотреть сообщение
(если они требуют что бы человек что то там делал в настройках что бы их среда увидела main)
они не требуют
главная функция для консоли main для винды WinMain
и если создать проект под винду а писать консолку, а равно и наоборот, то ясно что компилятор сойдет с ума
Вывод нужно создавать правильный проект
vxg
Модератор
3157 / 1959 / 218
Регистрация: 13.01.2012
Сообщений: 7,493
16.06.2014, 21:06 #27
Цитата Сообщение от ValeryS Посмотреть сообщение
главная функция для консоли main для винды WinMain
и если создать проект под винду а писать консолку, а равно и наоборот, то ясно что компилятор сойдет с ума
Вывод нужно создавать правильный проект
тогда подсказали бы человеку. если вы работаете в VS.
File/New/Project/Visual C++/Win32/Win32 Console Application
функции вставлять перед _tmain
использующий код писать внутри _tmain
GOLDProFA
0 / 0 / 0
Регистрация: 03.04.2013
Сообщений: 28
18.06.2014, 11:57  [ТС] #28
Не понял как этот код правильно переписать под VS (_tmain никогда еще не использовал). Может легче использовать другую среду разработки?

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;
}
FraidZZ
18.06.2014, 12:02
  #29

Не по теме:

GOLDProFA, к примеру, бесплатную wxDevC++

voral
436 / 416 / 59
Регистрация: 16.03.2008
Сообщений: 2,046
18.06.2014, 12:08 #30
http://fossies.org/dox/glibc-2.19/ma...8c_source.html
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.06.2014, 12:08
Привет! Вот еще темы с ответами:

Как получить исходный код *.exe или отредактировать его исполняемый код? - C++
Собственно возможно ли декомпилить его так, чтобы можно было потом обратно скомпилировать? Или хотя-бы отредактировать код, только не...

Не работают функции <math.h> в методе (функции-члене) - C++
Сделал программу которая решает по формуле задачу. Все работает, но стоило вынести нахождение y в функцию, как компилятор стал писать...

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

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


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
18.06.2014, 12:08
Ответ Создать тему
Опции темы

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