Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.12.2013, 03:07   #1
firerap
 
Аватар для firerap
 
Регистрация: 26.04.2010
Сообщений: 8
По умолчанию Вычисление тангенса С++

Требуется вычислить значения тангенса, используя разложение в ряд (где-то в пределах от -9 до 9), но например при x=6 выпадает floating point invalid, я так понимаю частично проблема в факториале, но я думаю еще где-то накосячил. Подскажите, можно ли поправить код, что бы он корректно работал без длинной арифметики и как это можно реализовать?
PHP код:
#include <stdio.h>
#include <conio.h>
#include <math.h>

#include <windows>


int fact(int n//Max n=12, overflow
{
if (
n>12puts("ERROR OVERFLOW");
    if(
n==0) {return 1;}
       else return 
n*fact(n-1);
}

double DzetaRiman(int s)
{
 
double t 0.000001;
 
double dzeta 0;
 
int i 1;
 
double mem 1;
 while (
mem>t) {
 
mem 1pow(i,s);
 
i++;
 
dzeta +=mem;
 }
 return 
dzeta;
}

double EvenBernulli(int n)
//Only for even n
int fsign=-1;
if((
n/2+1)%== 0fsign=1;
double r 2*fsign*DzetaRiman(n)*fact(n)/pow(2*M_PI,n);
return  
r;
}

double _tg(double x)
{
 
double mem 1;
 
int n 1;
 
double rtg 0;
 
double t 0.001;
 while (
mem>t){
  
mem EvenBernulli(2*n)*pow(-4,n)*(1-pow(4,n))*pow(x,2*n-1)/fact(2*n);
  
rtg+=mem;
  
n++;
  }
  return 
rtg;
}


void main(void){

 
printf("%f"_tg(6));
 
system("PAUSE");


firerap вне форума Ответить с цитированием
Старый 01.12.2013, 04:57   #2
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию

Вот тут написано, что формула для |x|< пи/2
http://ru.wikipedia.org/wiki/%D7%E8%...ED%F3%EB%EB%E8

Может в этом дело, надо приводить x к интервалу -пи/2 ..пи/2
type_Oleg вне форума Ответить с цитированием
Старый 01.12.2013, 13:30   #3
firerap
 
Аватар для firerap
 
Регистрация: 26.04.2010
Сообщений: 8
По умолчанию

Проверил при х = 1.5, не работает. Корректно находит тангенс только начиная с где-то х=0.8
firerap вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Функция гиперболического тангенса cucutnog Общие вопросы C/C++ 3 08.04.2013 15:19
Нахождение тангенса числа Alexsandr Общие вопросы C/C++ 6 06.12.2011 19:52
Нахождение тангенса угла. mosk3 Общие вопросы Delphi 0 08.09.2010 21:31
Нахождение тангенса угла наклона (С++) decompressed Помощь студентам 5 31.01.2010 20:06