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

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

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

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

03.10.2011, 23:11. Просмотров 2401. Ответов 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++
Написать программу , которая считает логарифм , первое число основание , второе степень.

20
Thinker
Эксперт С++
4227 / 2201 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
03.10.2011, 23:16 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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;
}
Добавлено через 38 секунд
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
double Cos(double x, double eps)
{
   int i;
   double p, rez; 
   i = 0;
   rez = p = 1;
   while(fabs(p) >= eps)
   {
       i += 2;
       p *= -(x*x)/((i-1)*i);
       rez += p;
   }
   return rez;
}
Вызов: Sin(2, 10e-100), Cos(5, 10e-100).
Второй параметр - точность вычисления, то есть ошибка не будет превышать значения eps.

В алгоритме использовано свойство рядов Лейбница.
3
easybudda
Модератор
Эксперт CЭксперт С++
9683 / 5633 / 956
Регистрация: 25.07.2009
Сообщений: 10,812
05.10.2011, 23:55 #3
Вызов: Sin(2 , 10e- 100), Cos(5, 10e- 100).
десять умноженое на десять в минус сотой степени? Ничё так точность...
1
Thinker
Эксперт С++
4227 / 2201 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
06.10.2011, 16:19 #4
Цитата Сообщение от easybudda Посмотреть сообщение
десять умноженное на десять в минус сотой степени?
Вы правы, что-то я нолик не туда добавил. Конечно, 1e-100
0
easybudda
Модератор
Эксперт CЭксперт С++
9683 / 5633 / 956
Регистрация: 25.07.2009
Сообщений: 10,812
06.10.2011, 16:20 #5
Цитата Сообщение от Thinker Посмотреть сообщение
Конечно, 1e-100
не-а!
1e-3


Так бы было один на десять в минус сотой степени - тоже очень маленькое число...
0
Thinker
Эксперт С++
4227 / 2201 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
06.10.2011, 16:21 #6
Цитата Сообщение от easybudda Посмотреть сообщение
не-а!
1e-3
Почему так мало?
0
easybudda
Модератор
Эксперт CЭксперт С++
9683 / 5633 / 956
Регистрация: 25.07.2009
Сообщений: 10,812
06.10.2011, 16:26 #7
Цитата Сообщение от Thinker Посмотреть сообщение
Почему так мало?
Одна тысячная? Да в принципе нормальная точность... Нанотехнологии в районе 1е-9 крутятся...
Код
C:\c_cpp\numbers>gcc -o 1e 1e.c

C:\c_cpp\numbers>1e
0.0010000000
0.0000000010

C:\c_cpp\numbers>type 1e.c
#include <stdio.h>

int main(void){
        printf("%.10f\n%.10f\n", 1e-3, 1e-9);
        return 0;
}

C:\c_cpp\numbers>
0
alkagolik
Заблокирован
06.10.2011, 16:30 #8
Thinker, почему-то я уверен что вы компетентны в вопросе. если не трудно, загляните пожалуйста сюда
0
Thinker
Эксперт С++
4227 / 2201 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
06.10.2011, 16:31 #9
Цитата Сообщение от easybudda Посмотреть сообщение
Одна тысячная?
Кажется, что маловато будет Ну, с другой то стороны, главное функции, а уж точность каждый под себя может подобрать. А Вы случайно не знаете какая у встроенных функций точность?
0
Nameless One
06.10.2011, 16:32
  #10

Не по теме:

Гляжу я на точность 10e-100, на эту табличку, и что-то меня напрягает... Казалось бы, при чем здесь гугол?

1
Thinker
Эксперт С++
4227 / 2201 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
06.10.2011, 16:44 #11
Цитата Сообщение от Nameless One Посмотреть сообщение

Не по теме:

Гляжу я на точность 10e-100, на эту табличку, и что-то меня напрягает...

Точно...
0
easybudda
Модератор
Эксперт CЭксперт С++
9683 / 5633 / 956
Регистрация: 25.07.2009
Сообщений: 10,812
06.10.2011, 16:49 #12
Цитата Сообщение от Thinker Посмотреть сообщение
А Вы случайно не знаете какая у встроенных функций точность?
Нет, к сожалению, знаю только, что диапазон типа double от 1E-37 до 1E+37, с точностью не менее 10 значащих десятичных цифр... Но стало интересно, надо подумать, как выяснить...
Опоздал немного...
1
Nameless One
Эксперт С++
5775 / 3425 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
06.10.2011, 16:54 #13
Thinker, у меня где-то так же, но это зависит от реализации. Я к тому, что зачем такая точность, и в какой области она будет иметь значение, если 10e100 - это число, которое на много порядков превосходит число атомов в известной части вселенной?
0
Thinker
Эксперт С++
4227 / 2201 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
06.10.2011, 17:01 #14
спасибо за полезные замечания, но почему тогда так работает

C++
1
printf("%f", Sin(2, 1e-100));
если диапазон от 1e-37 до 1e37?
Это же для типа float такой диапазон, а для double от 1e-307 до 1e307, разве нет? А для типа long double от 1.7e-4932 до 1.7e4932
0
Nameless One
Эксперт С++
5775 / 3425 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
06.10.2011, 17:07 #15
Thinker, смотрим комментарий:
The following panel shows the name of the different values defined in this header and their minimal magnitudes (positive numbers may be greater in value, and negative number may be less in value). Any particular implementation may have characteristics with greater magnitudes than those shown here
Т.е. это минимальные требования к реализации. Конкретная реализация может предоставлять более широкий диапазон
1
06.10.2011, 17:07
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.10.2011, 17:07
Привет! Вот еще темы с ответами:

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

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

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

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


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

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

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