Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Новые математические функции: std::sincos, std::invsqrt, std::rem. #513

Open
jin-x opened this issue Feb 27, 2022 · 0 comments
Labels
good first issue Несложная на вид идея. Самое то, чтобы попробовать написать на её proposal и помочь РГ21

Comments

@jin-x
Copy link

jin-x commented Feb 27, 2022

Предлагаю добавить несколько математических функций:

void std::sincos(double arg, double& sin, double& cos), std::sincos_t std::sincos(double arg), struct sincos_t { double sin, cos; } (а также sincosf, sincosl) — вычисление синуса и косинуса одной операцией, поскольку зачастую это можно реализовать более быстрым способом, чем последовательное вычисление sin и cos (аналогично как std::div позволяет получить сразу и частное, и остаток). Также будет полезно добавить функции std::apsin, std::apcos, std::apsincos, std::aptan, std::apatan и std::apatan2 для приблизительного вычисления синуса, косинуса, тангенса и арктангенса (во многих случаях точность не так важна, а кол-во итераций при использовании рядов Маклорена, используемых для вычисления тригонометрических функций в SIMD, можно уменьшить).

double std::invsqrt(double arg) (а также invsqrtf, invsqrtl... или std::arsqrt от слов "approximate reciprocal square root") — приблизительное вычисление обратного квадратного корня (например, в x86 / x86-64 реализуется через SIMD гораздо быстрее, чем вычисление квадратного корня и деления).

double std::rem(double x, double y) (а также remf, reml) — остаток от деления со знаком делителя (подобное реализовано во многих языках программирования, однако отсутствует в C++).

 
Примеров применения масса: работа с векторами, графика и пр.
 

Тесты sincos: https://quick-bench.com/q/4eUkcNZ70coSAcrXZTgruclN7Yw (в SIMD одновременное вычисление может быть осуществлено в 2 раза быстрее, чем последовательное, с использованием 2-х ячеек одного регистра: одной для синуса, другой для косинуса).

Тесты invsqrt: https://quick-bench.com/q/8_wm4EZ8VLkoQI2hwYPmKd7QDis.

@jin-x jin-x changed the title Новые математические функции: std::sincos, std::invsqrt (или std::arsqrt), и std::rem. Новые математические функции: std::sincos, std::invsqrt, std::rem. Feb 27, 2022
@apolukhin apolukhin added the good first issue Несложная на вид идея. Самое то, чтобы попробовать написать на её proposal и помочь РГ21 label Apr 3, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
good first issue Несложная на вид идея. Самое то, чтобы попробовать написать на её proposal и помочь РГ21
Projects
None yet
Development

No branches or pull requests

2 participants