forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   C++ (http://forum.boolean.name/forumdisplay.php?f=22)
-   -   "Ускорение" функций (http://forum.boolean.name/showthread.php?t=15012)

RegIon 28.06.2011 10:37

"Ускорение" функций
 
Код:

void draw_string(uint8_t font_id, uint16_t x, uint16_t y, char *str)
{
    gfx_point2d_t pos;
    gfx_rect_t    rect;
    int i, nchar,n,m;

    pos.x = x;
    pos.y = y;
    rect.width = 24;
    rect.height = 24;
    i = 0;

    while (str[i] != 0) {
      nchar = str[i];
      pos.x+=12;
      for(n=0;n<16;n++){
          for(m=0;m<16;m++){
            if(n*16+m==nchar){
            //pos.x = i*24;
            rect.x =m*24;
            rect.y =n*24;
            gfx_set_colorrop(0xcc);//api функции
            gfx_sprite(font_id, &rect, &pos);//api спрайта,рубит rect'ом ресует в pos
              }
            }
        }
        i++;
    }
}

пришлось писать такую функцию,ну как видно много циклов-меньше скорость,как "ускороить" её?(пока на скорость не влияет)
Код:

//целый корень....
int isqrt(unsigned x) {
  unsigned m, y, b;
  m = 0x40000000;
  y = 0;
  while(m != 0) {              // Do 16 times.
      b = y | m;
      y = y >> 1;
      if (x >= b) {  x = x - b; y = y | m; }
      m = m >> 2;
  }
  return y;
 }
 
float fsqrt(unsigned float x){//дробный корень с 3 числами после знака...
 int p=isqrt(x*100000);
    float n=(1.0*x)/(p*p);
      int s=isqrt(n*1000000);
float m=1.0*p*(s/1000.0);     
return m/1000.0;   
}

а эта считает корень без сопра(сопроцессора),как видно много делений на большие числа и умножение,а пользоваться смещением не умею.. подкинте идеи.

impersonalis 28.06.2011 10:49

Ответ: "Ускорение" функций
 
http://forum.boolean.name/showpost.p...4&postcount=10
корень

RegIon 28.06.2011 11:05

Ответ: "Ускорение" функций
 
м,никак,у меня компилятор на строчки asm'а ругается,таких я уже много нашел...

Mr_F_ 28.06.2011 16:53

Ответ: "Ускорение" функций
 
Цитата:

квадратный корень с минимальной точностью
аы аы. насколько неточен? для дистанции кто-нибудь пробовал юзать? или вообще где-нибудь

Tadeus 28.06.2011 18:21

Ответ: "Ускорение" функций
 
http://en.wikipedia.org/wiki/Fast_inverse_square_root
Вспомнилось сразу

IGR 29.06.2011 02:13

Ответ: "Ускорение" функций
 
подкиньте идеи как придумать теорему Пифагора !! (це)

RegIon 29.06.2011 04:08

Ответ: "Ускорение" функций
 
Цитата:

http://en.wikipedia.org/wiki/Fast_inverse_square_root
Вспомнилось сразу
и сколько погрешность?лень проверять

RegIon 29.06.2011 04:12

Ответ: "Ускорение" функций
 
НУ КОЛЬ ЕСТЬ УЖЕ ВСЁ,синус(косинус) никто не знает как посчитать тогда?а то есть.но что-то не робит...

impersonalis 29.06.2011 10:27

Ответ: "Ускорение" функций
 
http://forum.boolean.name/showthread.php?t=1305
http://forum.boolean.name/showthread.php?t=17

RegIon 29.06.2011 11:33

Ответ: "Ускорение" функций
 
Я это мог и в вике посмотреть,а толку,у меня есть функция sin по рядам:
""лень искать""
100% есть и в коде у кого-нить....

impersonalis 29.06.2011 15:17

Ответ: "Ускорение" функций
 
ленивый оптимизатор - это оксюморон.
ты тупой, какое отношение ты имеешь к оптимизации?

Mr_F_ 29.06.2011 20:03

Ответ: "Ускорение" функций
 
а ещё есть асм-функция sincos - может быть полезно (мне было полезно)
http://www.gamedev.ru/code/tip/?id=3820

Igor 30.06.2011 00:15

Ответ: "Ускорение" функций
 
sin и cos неплохо в ряд Тейлора.
Только значения больше пи (меньше минус пи) лучше не запихивать
вроде sin(x)=x-x3/3!+x5/5!-x7/7!...
P.S. с косинусом похоже, но там только чётные степени. Чем больше запишешь тем больше точность
P.P.S. А если нужна запредельная скорость с небольшой точностью то создай массив с поссчитанными значениями))

impersonalis 30.06.2011 00:17

Ответ: "Ускорение" функций
 
Цитата:

Сообщение от Igor (Сообщение 193735)
Только значения больше пи (меньше минус пи) лучше на запихивать

ну-ка - ну-ка?

SBJoker 30.06.2011 01:53

Ответ: "Ускорение" функций
 
Цитата:

Сообщение от Igor (Сообщение 193735)
P.P.S. А если нужна запредельная скорость с небольшой точностью то создай массив с поссчитанными значениями))

Заблуждение, это было актуально во времена медленных процессоров.
В данный момент честный расчёт sin / cos занимает меньше чем выборка из памяти. Можете замутить тест, удивитесь результатам.


Часовой пояс GMT +4, время: 22:31.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot