LINUX.ORG.RU

ускоренная математика (вычисление atan2, sqrt) c++

 ,


0

2

каждый раз мне нужно находить atan2 для всех точек. Я вот думаю, может его можно как-то хешировать, а не вычислять заново? Или можно как-то попросить его считать быстрее пожертвовав точностью?

П.С. https://github.com/theGABS/lsdDraw вот проект если интересно.

★★★
Ответ на: комментарий от TrueTsar1C

Правильно - умеет, только производительность на уровне штеуда, если это не квадра. Зачем он такой дабл нужен?

А что такое штеуд?

anonymous
()
Ответ на: комментарий от anonymous

интел за такую же цену.

Eсли знаешь - помоги разобраться с мусором, который идёт в синусы-косинусы. С таблицей будет та же пробелма. В libm синусе там какой-то хитрый модуль, который это умеет. fmodf() же не умеет.

  fprintf(stderr, "%lf\n", fmod(1221231234, M_PI));
  fprintf(stderr, "%lf\n", fmodf(1221231234, M_PI));

//bc -    .309856014157247599183843425890252100
//fmod - 0.30985606176293956082
//fmodf  2.02511382102966308594
TrueTsar1C
()
Ответ на: комментарий от TrueTsar1C

У тебя число выходит за пределы точности представления во флоат:

fprintf(stderr, "%f\n", (float)1221231234);
/* 1221231232.000000 */
cdslow ★★
()
Ответ на: комментарий от cdslow

Я знаю, что оно выходит - оно выходит по условию задачи. Даже если оно выходить за точность не будет - будет тоже самое, и вот именно вопрос в том, как сделать модуль на флоатах с хоть какой-то точностью.

Поидее sinf() не должен юзать даблы и он это как-то умеет.

  float t = 1221231.f;
  fprintf(stderr, "%.20lf\n", sin(t));
  fprintf(stderr, "%.20lf\n", sinf(t));
  fprintf(stderr, "%.20lf\n", fmod(t, M_PI));
  fprintf(stderr, "%.20lf\n", fmodf(t, M_PI));
  fprintf(stderr, "%.20lf\n", t);

//-0.30718154227520427790
//-0.30718153715133666992
//2.82936269331181122766
//2.79537892341613769531
//1221231.00000000000000000000
TrueTsar1C
()
Ответ на: комментарий от anonymous

Понимаешь в чем штука - это мультиплатформенные либы, которые должны работать везде, поэтому если есть флоат, то дабла может просто не быть. Ну и это логично, собственно - зачем разделение на дабл/флоат, если флоат юзает дабл? Впихнуть туда дабл может только аутист, но я сомневаюсь в том, что её писал аутист.

TrueTsar1C
()
Ответ на: комментарий от anonymous

Ты не ответил на вопрос, схуя ты решил что флоат юзает дабл?

Серанула и теперь несёшь херню? Там разве где-то написано, что флоат юзает дабл?

Что тебе от меня надо, балаболка? Свали нахрен, либо не неси херню. Мне не интересно общаться с вами, жалким форфан балаболящим мусором, чтобы потом меня банили.

TrueTsar1C
()
Ответ на: комментарий от TrueTsar1C

О, бомбануло! Это бля Пушкин написал:

Поидее sinf() не должен юзать даблы и он это как-то умеет.

Нет, это твои слова.

То что ты видишь что modf лажает, а sin нет — нихуя не значит что там есть где-то даблы. Это просто значит что для редукции аргумента нельзя использовать modf. Зырь как можно.

anonymous
()
Ответ на: комментарий от anonymous

Нет, это твои слова.

И где тут написано, что синф юзает дабл?

То что ты видишь что modf лажает, а sin нет — нихуя не значит что там есть где-то даблы.

Я где-то об этом писал?

Это просто значит что для редукции аргумента нельзя использовать modf

Предложения вперёд.

Зырь как можно.

И что ты мне линканул? Где тут редукция аргумента на уровне, на котором лажает modf?

TrueTsar1C
()
Ответ на: комментарий от TrueTsar1C

Это просто значит что для редукции аргумента нельзя использовать modf

Предложения вперёд.

И что ты мне линканул?

То и линканул, а ты просто тупой баран.

anonymous
()
Ответ на: комментарий от anonymous

Т.е. с одним ты обосрался, продолжим со вторым.

Теперь покажи мне где в твоей линке редукция аргумента на уровне, на котором лажает fmodf. Вы реально настолько тупые, что не понимаете - то, что ты там кукарекнул, что я что-то там сказал - ничего не значит, так же как и твоё ко-ко-ко сейчас.

Ты мне конкретно показываешь код, которого там нет. Поищи чтоли поглубже. А ну и там даже дабл есть - это так мило.

TrueTsar1C
()
Ответ на: комментарий от TrueTsar1C

Ты вообще по ссылке ходил? Если ты настаиваешь, давай я тебя ебальничком ткну в строку 76. Дальше сам найдешь?

anonymous
()
Ответ на: комментарий от anonymous

И что же там на 76-й строке - где код? К чему ты это линканул, повторю ещё раз?

Дальше сам найдешь?

Т.е. ты найти то, что надо не осилилось, но линкануть херню и нести херню - всегда готов? хорошо.

TrueTsar1C
()
Ответ на: комментарий от TrueTsar1C

Ну, вот тебе модуль поточнее, только я уверен, что это будет в разы медленнее, чем один раз использовать double:

#include <stdio.h>
#include <math.h>

float fmod_pi(float a)
    {
    float const PI_A = M_PI;
    float const PI_B = M_PI - PI_A;
    int pi_e;
    int e;
    float pi_a, pi_b;

    frexpf(PI_A, &pi_e);
    frexpf(a, &e);

    e -= pi_e;

    pi_a = ldexpf(PI_A, e);
    pi_b = ldexpf(PI_B, e);

    while(a > PI_A)
        {
        if(a > pi_a)
            {
            a -= pi_a;
            a -= pi_b;
            }
        else
            {
            pi_a /= 2;
            pi_b /= 2;
            }
        }

    return a;
    }

int main(void)
    {
    float t = 1221231.f;

    fprintf(stderr, "double:       %.20lf\n", fmod(t, M_PI));
    fprintf(stderr, "double/float: %.20lf\n", fmod(t, (float)M_PI));
    fprintf(stderr, "float:        %.20lf\n", fmodf(t, M_PI));
    fprintf(stderr, "fmod_pi:      %.20lf\n", fmod_pi(t));
    fprintf(stderr, "t: %.20lf\n", t);

    return 0;
    }

/*
double:       2.82936269331181122766
double/float: 2.79537892341613769531
float:        2.79537892341613769531
fmod_pi:      2.82776045799255371094
t: 1221231.00000000000000000000
*/
cdslow ★★
()
Последнее исправление: cdslow (всего исправлений: 1)

Вон я заговнякал пример, раз в 20быстрее стока на одном ведре, который работает более-менее. Можно ещё поиграться и раз в 100быстрее сделать.

https://gist.githubusercontent.com/superhackkiller1997/cf20e3adbf89471d2400/r...

По идее работать должно везде от коры2. Особо тестить и причёсывать времени нет.

TrueTsar1C
()
Ответ на: комментарий от aedeph_

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

TrueTsar1C
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.