Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Синус и косинус 
:(
    Опции темы
kleks
Дата 21.5.2006, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 6.10.2005

Репутация: нет
Всего: нет



Может кто-нибудь реализовывал такие функции как sin() и cos(), или может кто-нибудь подскажет как это можно сделать?! заранее благодарен....

 
PM MAIL   Вверх
Replicator
Дата 21.5.2006, 14:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 30.4.2006
Где: Outer Heaven

Репутация: нет
Всего: нет



Разложением в ряд Тейлора. 
--------------------
 
PM WWW ICQ   Вверх
Droll
Дата 21.5.2006, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 10.11.2004

Репутация: нет
Всего: 3



Вычисление синуса и косинуса есть в модуле Math.h
Вычисление косинуса и синуса через разложение Тейлора приведено в области имен Tailor
Код

#include <iostream>
#include <math.h>

// Число Пи - для перехода от радиан к градусам
#define PI 3.1415926535897932384626433832795

// Вычисление косинуса и синуса через разложение Тейлора:
namespace Tailor
{
    // Точность вычислений
    #define  TOLERANCE 10e-10
    
    float Sin(float x)
    {
        float add = x;      // первый член ряда
        float mul = -(x*x); // Модификатор
        float result = x;   // результат

        for (int i=3;(add > TOLERANCE) || (add < -TOLERANCE); i += 2)
        {
            add = add * mul/(i * (i - 1)); // превращаем член  ряда в следующий
            result += add;
        }
        return result;
    }
    
    float Cos(float x)
    {
        float mul = -(x*x); // Модификатор
        float add = mul/2; // Второй член
        float result = 1 + add; // Результат

        for (int i = 4;(add > TOLERANCE) || (add < -TOLERANCE); i += 2)
        {
            add = add * mul/(i * (i - 1)); // Следующий член ряда
            result += add;
        }
        return result;
    }
}

int main(int argc, char *argv[])
{
    float X;
    // Введите Х
    printf("Input X = ");
    scanf("%f", &X);
    // Синус (в радианах)
    printf("\n\nsin(%1.2f[rad]) == %1.4f\n", X, sin(X));
    // Синус (в градусах)
    printf("sin(%1.2f[deg]) == %1.4f\n", X, sin((X * PI)/180));
    // Коинус (в радианах)
    printf("\ncos(%1.2f[rad]) == %1.4f\n", X, cos(X));
    // Косинус (в градусах)
    printf("cos(%1.2f[deg]) == %1.4f\n", X, cos((X * PI)/180));
    
    using namespace Tailor;
    
    printf("\n\nTailor:\n");

    // Синус (в радианах)
    printf("\nsin(%1.2f[rad]) == %1.4f\n", X, Sin(X));
    // Синус (в градусах)
    printf("sin(%1.2f[deg]) == %1.4f\n", X, Sin((X * PI)/180));
    // Коинус (в радианах)
    printf("\ncos(%1.2f[rad]) == %1.4f\n", X, Cos(X));
    // Косинус (в градусах)
    printf("cos(%1.2f[deg]) == %1.4f\n", X, Cos((X * PI)/180));

    system("PAUSE");
    return 0;
}

Удачи!
  

Это сообщение отредактировал(а) Droll - 21.5.2006, 14:43
PM   Вверх
kleks
Дата 21.5.2006, 16:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 6.10.2005

Репутация: нет
Всего: нет



Спасибо огромное!!!! Но у меня возник вопрос я сейчас пишу класс для работы с бесконечно длинными числами и поэтому Ваши функции мне пришлось не много переделать:
Код

BigInt Cos(BigInt x)
{
    BigInt TOLERANCE ("0.0000000001");
    BigInt a("2"),c("1"),i("4");
    BigInt mul (-(x*x)); // Модификатор
    BigInt add = mul/a; // Второй член
    BigInt result = c + add; // Результат
       for (i;(add > TOLERANCE) || (add < -(TOLERANCE)); i += a)
        {
            add = add * mul/(i * (i - c)); // Следующий член ряда
            result += add;
        }
        return result;
}


А вопрос вообщем то вот в чём: когда я вычисляю при помощи данной функции, например cos(1), результат у меня таков: 0,54029974560953182242, что достаточно сильно отличается от идеала (windows calc) 0.5403023058681397174, отчего это может происходить (увеличивал точноть, но безрезультативно)..., смотрел как работают Ваши функции, без моего, так сказать вмешательства, то там всё как положенно, всё точно!!!!  
PM MAIL   Вверх
bsa
Дата 21.5.2006, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



проверяй точность базовых операций, сложение, вычитание, деление и умножение. 
PM   Вверх
kleks
Дата 21.5.2006, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 6.10.2005

Репутация: нет
Всего: нет



точность базовых операций я проверял...там всё ок!!!!!!!!!!! 
PM MAIL   Вверх
Replicator
Дата 21.5.2006, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 30.4.2006
Где: Outer Heaven

Репутация: нет
Всего: нет



Тогда в формуле разложения косячек. 
--------------------
 
PM WWW ICQ   Вверх
kleks
Дата 21.5.2006, 18:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 6.10.2005

Репутация: нет
Всего: нет



Цитата

Тогда в формуле разложения косячек. 

Интересно какие...может можно как-нибудь по другому разложить....? 
PM MAIL   Вверх
murrosy
Дата 16.12.2015, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 16.12.2015

Репутация: нет
Всего: нет



Раньше у меня вычисления отнимали очень много времени. А теперь пользуюсь классным сервисом. Например, если надо посчитать косинус, то иду сюда: вычисление косинусов.

Это сообщение отредактировал(а) murrosy - 19.12.2015, 21:55
PM MAIL   Вверх
feodorv
Дата 16.12.2015, 20:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 11
Всего: 45



murrosy
Цитата
404
Страница не существует



--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
Alexeis
Дата 17.12.2015, 19:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 12
Всего: 459



С тейлором есть особенности. Он хорошо сходится для малых углов. Чем больше угол тем медленнее сходится. Насколько я помню на практике раскладывают синус только в диапазоне от 0..45 градусов, остальные углы пересчитывают по формулам тригонометрии. 
45 градусов это примерно 0,78. Для единицы я вообще не уверен что ряд сойдется.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0858 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.