chemmisol 0.1
Loading...
Searching...
No Matches
arithmetics.h
1#ifndef CHEMMISOL_ARITHMETICS_H
2#define CHEMMISOL_ARITHMETICS_H
3
4#include <complex>
5#include <list>
6#include <iostream>
7#include <numbers>
8
9namespace chemmisol {
10 constexpr double pi = 3.141592653589793238462643383279502884;
11
12 template<typename T>
13 std::list<std::complex<T>> unit_roots(int n) {
14 std::list<std::complex<T>> r;
15 std::complex<T> single_root = {
16 std::cos(2*pi/n),
17 std::sin(2*pi/n),
18 };
19
20 for(int i = 0; i < n; i++) {
21 r.push_back(std::pow(single_root, i));
22 }
23 return r;
24 }
25
26 template<typename T>
27 std::list<std::complex<T>> roots(const std::complex<T>& c, int n) {
28 std::list<std::complex<T>> r;
29 T theta = std::arg(c);
30 std::complex<T> single_root =
31 std::polar(std::pow(std::abs(c), T(1.0)/n), theta/n);
32 auto units = unit_roots<T>(n);
33 for(auto unit : units) {
34 r.push_back(single_root * unit);
35 }
36 return r;
37 }
38}
39#endif
Definition chemmisol.h:31