47 #define ADDOP(n) BH::op += ((int)n)
57 static const double PI = 3.1415926535897932384626;
58 static const double DPI = 2.0 * 3.1415926535897932384626;
59 static const double IPI = 1.0 /
PI;
70 if (i00.capacity() == i00.size())
71 i00.reserve(i00.size() * 2);
87 phi = n * atan2(z[1], z[0]);
89 return Point2D({ R * cos(phi), R * sin(phi) });
100 template <
typename T>
110 template <
typename T>
113 return (T(0) < val) - (val < T(0));
128 inline int ceilpow2(
unsigned int x,
unsigned int p)
130 return (x >> p) + !!(x & ((1 << p) - 1));
136 return (x >> 1) + (x & 1);
147#pragma omp simd reduction(+:norm)
149 for (
size_t i = 0; i < b.size(); i++)
150 norm += (b[i] * b[i]);
151 ADDOP(2*b.size() + 1);
157 inline std::vector<T>
operator+(
const std::vector<T>& x,
const std::vector<T>& y)
163 for (
size_t i = 0; i < x.size(); ++i)
171 inline std::vector<T>&
operator+=(std::vector<T>& x,
const std::vector<T>& y)
176 for (
size_t i = 0; i < x.size(); ++i)
183 inline std::vector<T>
operator-(
const std::vector<T>& x,
const std::vector<T>& y)
189 for (
size_t i = 0; i < x.size(); ++i)
196 inline std::vector<T>&
operator-=(std::vector<T>& x,
const std::vector<T>& y)
201 for (
size_t i = 0; i < x.size(); ++i)
208 inline std::vector<T>
operator*(
const T lambda,
const std::vector<T>& x)
216 for (
size_t i = 0; i < x.size(); ++i)
225 inline T
operator&(
const std::vector<T>& x,
const std::vector<T>& y)
229#pragma omp simd reduction(+:c)
231 for (
size_t i = 0; i < x.size(); ++i)
Описание констант и параметров для взаимодействия с графическим ускорителем
Заголовок класса-обертки для точек и панелей для метода Барнса - Хата для CPU.
auto length2() const -> typename std::remove_const< typename std::remove_reference< decltype(this->data[0])>::type >::type
Вычисление квадрата нормы (длины) вектора
std::vector< T > operator+(const std::vector< T > &x, const std::vector< T > &y)
Шаблонная функция сложения двух векторов
Point2D powz(const Point2D &z, double n)
Умножение комплексных чисел
int ceilhalf(unsigned int x)
Округление "в потолок" результата деления пополам, эквивалент ceil(x / 2)
T operator&(const std::vector< T > &x, const std::vector< T > &y)
Шаблонная функция вычисления скалярного произведения двух векторов
static const int twoPowCodeLengthVar
2 в степени длины мортоновского кода (на каждую координату)
std::vector< T > & operator+=(std::vector< T > &x, const std::vector< T > &y)
Шаблонная функция прибавления к одному вектору другого
double norm(const T &b)
Шаблонная функция вычисления евклидовой нормы вектора или списка
int ceilpow2(unsigned int x, unsigned int p)
Округление "в потолок" результата деления на степень двойки, эквивалент ceil(x / (2^p))
T sqr(T x)
Умножение a на комплексно сопряженноe к b.
std::vector< T > operator*(const T lambda, const std::vector< T > &x)
Шаблонная функция умножения числа на вектор
int sign(T val)
Шаблонная функция знака числа Написана оптимизированная версия, которая работает самым быстрым возмож...
std::vector< T > & operator-=(std::vector< T > &x, const std::vector< T > &y)
Шаблонная функция вычитания из одного вектора другого
std::vector< T > operator-(const std::vector< T > &x, const std::vector< T > &y)
Шаблонная функция вычитания векторов
void SizeCheck(std::vector< Point2D > &i00)
Вспомогательная функция корректировки capacity вектора (при необходимости - удваивает)
long long op
Глобальная переменная - счетчик количества операций