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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.89
Iblis
Сообщений: n/a
#1

Код для расчета тригонометрических функиций - C++

03.10.2011, 23:11. Просмотров 2367. Ответов 20
Метки нет (Все метки)

Здравствуйте. Нужна помощь в написании кода для расчета тригонометрических функций (sin,cos) без использования библиотеки math.h. То есть сделать это все через ряд Тейлора. И если можно добавить функцию построения графика.

Ряд Тейлора для sin:
http://www.pm298.ru/Math/f1877.JPG


для cos:
http://www.pm298.ru/Math/f1878.JPG
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.10.2011, 23:11
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Код для расчета тригонометрических функиций (C++):

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

формула для расчета даты - C++
в общем проблема в методе DateTime add_hour(int x)const нужно составить формулу чтобы при прибавлении часов правильно рассчитывался день...

рекурсия для расчета суммы - C++
Пожалуйста, помогите разобраться и написать программу: Использовать рекурсию для расчета суммы 2+1/(2!) + 1/(3!) +...+1/(N!)....

Программа для расчета энергии - C++
Народ помогите разобраться в чем дело. Вроде программа написана правильно, но работает не корректно. Компилил в dev c++. Привожу текст...

Програмка для расчета градусов - C++
на самом деле это кусок программки, остальное есть, нужна программка которая будет считать значения углов косинуса и синуса, скажем от 0 до...

Программа для расчета логарифма - C++
Написать программу , которая считает логарифм , первое число основание , второе степень.

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Thinker
Эксперт C++
4225 / 2199 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
06.10.2011, 17:10 #16
Цитата Сообщение от Nameless One Посмотреть сообщение
это минимальные требования к реализации. Конкретная реализация может предоставлять более широкий диапазон
Все, теперь на свои места вновь стало все, спасибо, все как и думал раньше С учетом всего сказанного можно рассмотреть точность 1e-10, в любом случае пройдет
0
easybudda
Модератор
Эксперт CЭксперт С++
9622 / 5570 / 946
Регистрация: 25.07.2009
Сообщений: 10,695
06.10.2011, 17:16 #17
Цитата Сообщение от Thinker Посмотреть сообщение
но почему тогда так работает?
Так тоже работает
C
1
2
3
4
5
6
7
8
#include <stdio.h>
#include <limits.h>
    
int main(void){
    int i = INT_MAX * 10 - (INT_MAX * 10 - 1);
    printf("%d\n", i);
    return 0;
}
и даже печатает единицу, хоть и ругается при компиляции...

Мало того, опытным путём установлено:
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
#include <stdio.h>
#include <math.h>
    
double Sin(double x, double eps)
{
   int i;
   double p, rez;
   i = 1;
   rez = p = x;
   while(fabs(p) >= eps)
   {
       i += 2;
       p *= -(x*x)/((i-1)*i);
       rez += p;
   }
   return rez;
}
 
int main(void){
    printf("%.20f\n", Sin(2, 1e-100));
    printf("%.20f\n", Sin(2, 1e-90));
    printf("%.20f\n", Sin(2, 1e-14));
    printf("%.20f\n", Sin(2, 1e-13));
    return 0;
}
Код
C:\c_cpp\numbers>custom_sin.exe
0.90929742682568171000
0.90929742682568171000
0.90929742682568171000
0.90929742682568204000
1
Thinker
Эксперт C++
4225 / 2199 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
06.10.2011, 17:23 #18
Цитата Сообщение от easybudda Посмотреть сообщение
Так тоже работает
Имелось ввиду, что не просто работает, а не зацикливается, как при нуле, например. Видите, Ваш опыт показал насколько важна точность Тут просто аргумент такой, а если с периодами числа, то всякое может быть. Хотя, согласен, -100 это слишком. На этом я и не настаивал, просто пример был, можно и 1e-3, как Вы предложили, меня сам алгоритм более интересовал.
0
easybudda
Модератор
Эксперт CЭксперт С++
9622 / 5570 / 946
Регистрация: 25.07.2009
Сообщений: 10,695
06.10.2011, 17:37 #19
Цитата Сообщение от Thinker Посмотреть сообщение
меня сам алгоритм более интересовал.
Ну на этот счёт сомнений-то как-раз небыло. Кстати
C
1
printf("%.20f", sin(2.0));
всё то же 0.90929742682568171000 выдаёт...

Вот ещё смелый эксперимент:
C
1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
#include <math.h>
    
int main(void){
    int i;
    for ( i = 100; ( 1.0 / pow(10.0, (double)i) ) > 0.0; ++i )
        ;
    printf("%d\n", i);
    return 0;
}
выдало 309...

Не по теме:

А вообще, наверное, про точность лучше бы отдельную тему создать, а то отвлеклись мы сильно...

0
Thinker
Эксперт C++
4225 / 2199 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
06.10.2011, 17:46 #20
easybudda, а вот так уже не совпадает

C++
1
2
   printf("%.20f\n", Sin(3, 1e-100));
   printf("%.20f\n", sin(3));
0
Nameless One
Эксперт С++
5773 / 3424 / 255
Регистрация: 08.02.2010
Сообщений: 7,447
06.10.2011, 18:09 #21
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Thinker Посмотреть сообщение
А Вы случайно не знаете какая у встроенных функций точность?
что говорит Википедия насчет синуса:
Some CPU architectures have a built-in instruction for sin, including the Intel x86 FPU. In programming languages, sin is usually either a built in function or found within the language's standard math library.
т.е. у меня, к примеру, синус считается непосредственно встроенной в процессор инструкцией.
Типичная программная реализация использует массив коэффициентов для первых шести (для float) тождественно ненулевых слагаемых в разложении синуса в ряд (что логично, т.к. шестой коэффициент - это http://www.cyberforum.ru/cgi-bin/latex.cgi?\frac1{11!}, что довольно-таки малое число, тем более что аргумент по модулю не превосходит http://www.cyberforum.ru/cgi-bin/latex.cgi?\frac{\pi}2): http://www.google.com/codesearch/p?h...ibc/math/sin.c. Т.е. точность явно не учитывается.
3
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.10.2011, 18:09
Привет! Вот еще темы с ответами:

Программа для расчета радиостанций - C++
День добрый. Помогите написать программу для учета 3х радиостанций и человека стоящего в центре. На С. На рисунке 1,2 и 3 радиостанции, 4...

Функция для расчета доли - C++
Даны два предложения. В каком из них доля (в %) буквы -б- больше. (Определить функцию для расчета доли некоторой буквы в предложении.)

программа для расчета формул - C++
z=cosx*sinx z2=sin3x+sin2x+sinx

Программа для расчета математического примера - C++
Помогите пожалуйста с кодом программы,заранее спасибо.Пример 10


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

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

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