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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.82
Medved.tolik
0 / 0 / 0
Регистрация: 28.12.2010
Сообщений: 15
#1

Sin быстрее чем из math.h - C++

03.02.2012, 17:35. Просмотров 1340. Ответов 9
Метки нет (Все метки)

ребят, вообщем мне задали написать программу которая считала синус быстрее чем из math.h ) скорость должна достигаться путем потери точности) Я вот написал код который(как я думаю должен быстрее работать) но на деле не вижу что он быстрее) подтолкните кто нить)
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
#include <iostream>
#include <conio.h>
#include <math.h>
#include <windows.h>
const int N=100000;
void main(void)
{int i;
double x1,x2,y,z;
x1=1.0; x2=2.0-1.0e-10;// вот здесь я обрезаю точность до 10 знаков 
y=(x2-x1)/N;
LARGE_INTEGER freq;
QueryPerformanceFrequency(&freq);
 
LARGE_INTEGER time1;
QueryPerformanceCounter(&time1);
for(i=0,z=x1;i<N;i++,z+=y)
{
sin(z);
}
LARGE_INTEGER time2;
QueryPerformanceCounter(&time2);
time2.QuadPart -= time1.QuadPart;
double span = (double) time2.QuadPart / freq.QuadPart; 
printf( "for sin time: %f seconds\n", span );
getch();
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nameless One
Эксперт С++
5767 / 3416 / 255
Регистрация: 08.02.2010
Сообщений: 7,441
03.02.2012, 17:45     Sin быстрее чем из math.h #2
Как мне кажется, преимущества в скорости можно добиться, используя при вычислении синуса его N первыx коэффициентов разложения в ряд Маклорена
icpu
318 / 223 / 43
Регистрация: 10.03.2011
Сообщений: 1,064
Записей в блоге: 2
03.02.2012, 17:50     Sin быстрее чем из math.h #3
а то, что вы сделали, я не знаю, как называются.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
03.02.2012, 17:57     Sin быстрее чем из math.h #4
По моему даже месяца не прошло с тех пор, как эта тема поднималась чуть ли не в такой же формулировке.
Вот хоть бы для приличия поиском пользовались...
easybudda
Эксперт С++
9454 / 5467 / 926
Регистрация: 25.07.2009
Сообщений: 10,490
03.02.2012, 18:03     Sin быстрее чем из math.h #5
Цитата Сообщение от Medved.tolik Посмотреть сообщение
написать программу которая считала синус быстрее чем из math.h ) скорость должна достигаться путем потери точности
Берёте таблицу Брадиса, заносите её в массив, приводите угол к минимальным целым единицам (по этой таблице судя к минутам), выводите результат по таблице...
Jupiter
Каратель
Эксперт С++
6550 / 3970 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
03.02.2012, 18:35     Sin быстрее чем из math.h #6
Цитата Сообщение от icpu Посмотреть сообщение
а то, что вы сделали, я не знаю, как называются.
пичалька
icpu
318 / 223 / 43
Регистрация: 10.03.2011
Сообщений: 1,064
Записей в блоге: 2
03.02.2012, 18:43     Sin быстрее чем из math.h #7
Jupiter, нет, конкретно у него я не понял, что в программе написано. в единственном цикле он считает единственный синус стандартной реализации... Я просто не понял суть ЧЕГО ИМЕННО необычного в этой программе? В том, что вместо 1. у него 0.9999999999something?
Jupiter
03.02.2012, 18:49
  #8

Не по теме:

icpu, пардон, неправильно трактовал ваш пост и вообще перепутал вас с топик стартером

Medved.tolik
0 / 0 / 0
Регистрация: 28.12.2010
Сообщений: 15
05.02.2012, 19:45  [ТС]     Sin быстрее чем из math.h #9
Ну а с таблицами там не совсем понял) вот чтот поднакидал) помогите доделать)
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
//// заголовочный файл
#pragma once
#define MAX_ANGLE 360
class GE_FastMath
{private:    
static double mCosTable[MAX_ANGLE];
static double mSinTable[MAX_ANGLE];public:    
static void Initialize();    
static double Cos(int iAngle) 
{ return mCosTable[iAngle]; }    
static double Sin(int iAngle) 
{ return mSinTable[iAngle]; }};
// cpp-файл
#include "StdAfx.h"
#define _USE_MATH_DEFINES
#include <math.h>
#include "GE_FastMath.h"
double GE_FastMath::mCosTable[MAX_ANGLE];
double GE_FastMath::mSinTable[MAX_ANGLE];
void GE_FastMath::Initialize(void)
{    for(int i = 0; i<MAX_ANGLE; i++)   
 {        double lRadian = i * (M_PI / 180); 
       mCosTable[i] = cos(lRadian);       
 mSinTable[i] = sin(lRadian);    }}
Добавлено через 2 часа 31 минуту
есть у кого-нибудь какие-нибудь идеи?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.02.2012, 20:22     Sin быстрее чем из math.h
Еще ссылки по теме:

Вычислить выражение sin(sin(sin...(x))...) C++
C++ Быстрее ли localMember чем this->localMember?
Быстрее ли вывов функции, переданной через параметр шаблона, чем через простой указатель на функцию? C++
C++ C программа компилируется быстрее чем C++
Почему матрица на вектор умножается быстрее чем вектор на матрицу? C++

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

Или воспользуйтесь поиском по форуму:
Evg
Эксперт CАвтор FAQ
17398 / 5636 / 352
Регистрация: 30.03.2009
Сообщений: 15,422
Записей в блоге: 26
05.02.2012, 20:22     Sin быстрее чем из math.h #10
Если тебе это чем-то поможет, то вот glibc'шная реализация:

http://sourceware.org/git/?p=glibc.g...sinf.c;hb=HEAD
отсюда тебе можно брать только первую ветку (т.е. аргумент от -pi/4 до +pi/4) и далее продолжение в следующем файле:
http://sourceware.org/git/?p=glibc.g...sinf.c;hb=HEAD

Макрос GET_FLOAT_WORD просто побитно копирует из float'а в int. Если тебе это непонятно, то см. реализацию тут: http://sourceware.org/git/?p=glibc.g...vate.h;hb=HEAD
Yandex
Объявления
05.02.2012, 20:22     Sin быстрее чем из math.h
Ответ Создать тему
Опции темы

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