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

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

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

вычислить синус без математических библиотек с точностью 0,001 - C++

20.04.2011, 12:48. Просмотров 2322. Ответов 2
Метки нет (Все метки)

Здравствуйте уважаемые форумчане, как то я задавал вопрос как вычислить синус без библиотеки "cmath", но сходив в университет, обнаружил, что неправильно записал условие, которое звучит так:

Вычислить синус вводимого угла, без использования математических библиотек, с точностью 0,001.

Посидевши за ПК 1 час допёр вот до такого кода:

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
#include "stdafx.h"
#include "iostream"
#define PI 3,141592653589793238
using namespace std;
 
double fact(double n){//Функция вычисления факториала
    double f=1,b=2*n+1;
    int i;
    for(i=0;i<=b;i++){
        f=f*i;
    if(i==0){f=1;}
                     }
    return f;}
 
double pow(double x, double n){//Функция вычисления x^2n+1
    double X=1, b=2*n+1;
    int i;
    for(i=1;i<=b;i++){X=X*x;}
 
    return X;}
 
int main(){
    double x,n,power,factorial,sin=0;
    cout<<"Enter x: "; cin>>x;
    x=x*PI/180;
    do{
        for(n=0;;n++){sin=sin+((-1/(factorial=fact(x)))*(power=pow(x,n)));}//Цикл без ограничения n, я думал что ограничение задасться в цикле while 
      }while(((-1*power)/factorial)>=0.001);//Цикл с постусловием, выполняемый до тех пор пока: (-1*power)/factorial)>=0.001
        
    cout<<sin<<"\n";
    
    system("pause");
 
    return 0;}
Попрошу проанализировать код и указать все неточности, при запуске и вводе значения x ничего не происходит, как я понял получился бесконечный цикл и скорее всего это вот эта строка:
C++
1
for(n=0;;n++){sin=sin+((-1/(factorial=fact(x)))*(power=pow(x,n)));}
, вопрос как сделать так чтобы цикл
C++
1
for(n=0;;n++)
распространял своё действие и на функции??++
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.04.2011, 12:48
Здравствуйте! Я подобрал для вас темы с ответами на вопрос вычислить синус без математических библиотек с точностью 0,001 (C++):

Вычислить значение cos шести градусов с точностью до 0,001 - C++
Не знаю как вставлять формулы, поэтому все задание кидаю скрином: P.S. За ранее спасибо. Извините за задание на скрине. п. 5.18....

Вычислить значение функции exp(x) с точностью 0.001 (разложение в ряд Тейлора) - C++
вычислить значение функции exp(x) с точностью 0.001, разложив функцию в ряд Тейлора где ошибка не подскажите? вычисляет не верно.......

Используя интерполяционную формулу Ньютона, вычислить значение функции при заданных значениях аргумента с точностью до 0.001 - C++
Нужно написать програму которая будит используя интерполяционную формулу Ньютона вычеслять значение функции. Задание: Значение...

Сумма ряда с точностью 0,001 - C++
Помогите пожалуйста, как рассчитать правильно по данному условию: (фото снизу) Мои попытки: #include&lt;stdio.h&gt; ...

Метод половинного деления с точностью до 0.001 - C++
Решить задание методом половинного деления с точностью до 0.001, F(x)=0 не могу разобраться для такой сложной функции как сделать метод ...

Найти сумму ряда с точностью =0,001 - C++
Найти сумму ряда с точностью =0,001, общий член которого: an=1/2^n+1/3^n

2
IrineK
Заблокирован
20.04.2011, 15:38 #2
Выводит таблицу синусов для Х в окрестности 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
26
27
#include <iostream>
#include <iomanip>
using namespace std;
 
int main()
{
        int i,fact;
        double x=0.0,dx=0.1,eps=0.00001,add,sum;
        cout<<"X\t||\t sin(X)\t||\t\t N iter\n";
        cout<<"_____________________________________________________\n";
        while(x<0.9)
        {       
                add=x;
                sum=x;
                fact=1;
                for(i=2;add>eps;i++)
                {       fact*=i;
                        if(i%2) 
                        {       add*=-x*x/fact;
                                sum += add;
                        }
                }
        cout<<x<<"\t||\t"<<fixed<<setprecision(5)<<sum<<"\t\t||\t"<<i<<endl;
        x+=dx;
        }
        return 0;
}
0
Excelvrn
0 / 0 / 0
Регистрация: 19.05.2012
Сообщений: 26
02.03.2016, 09:43 #3
ты использовал ряд Тейлора, хотя для вычисления синуса (косинуса) мог использовать препроцессор, заточенный под числа с плавающей запятой.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.03.2016, 09:43
Привет! Вот еще темы с ответами:

Найти сумму элементов последовательности с точностью 0,001 - C++
помогите пожалуйста, совсем не понял этого задания. Если кто сможет желательно с комментариями. Regis, пожалуйста, прочитайте...

Написать программу, которая вычисляет значение e^2 с точностью до 0,001 - C++
Помогите решить такое задание: 1. Написать программу, которая вычисляет значение e2(здесь квадрат) с точностью до 0,001. Известно, что ...

Написать программу, которая вычисляет значение sin(6\o ) з точностью до 0,001 - C++
Помогите решить такую задачку: Написать программу, которая вычисляет значение sin(6 градусов) з точностью до 0,001. Известно, что ...

Определить количество циклов при вычислении с точностью 0,001 суммы - C++
Здравствуйте еще раз) Прошу помощи определить количество циклов при вычислении с точностью 0,001 суммы


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

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

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