ORIGINAL
Loading...
Searching...
No Matches
maths.h
1#ifndef MATHS_H
2#define MATHS_H
3#include "error.h"
4
5namespace original{
6
7 constexpr long double E = 2.7182818284590452353602874713526624977572470937000L;
8 constexpr long double PI = 3.1415926535897932384626433832795028841971693993751L;
9
10 template<typename TYPE>
11 TYPE abs(TYPE a);
12
13 template<typename TYPE>
14 TYPE max(TYPE a, TYPE b);
15
16 template<typename TYPE>
17 TYPE min(TYPE a, TYPE b);
18
19 double pow(double base, int exp);
20}
21
22 template<typename TYPE>
23 auto original::abs(TYPE a) -> TYPE
24 {
25 return a > TYPE{} ? a : -a;
26 }
27
28 template<typename TYPE>
29 auto original::max(TYPE a, TYPE b) -> TYPE
30 {
31 return a > b ? a : b;
32 }
33
34 template<typename TYPE>
35 auto original::min(TYPE a, TYPE b) -> TYPE
36 {
37 return a < b ? a : b;
38 }
39
40 inline auto original::pow(const double base, const int exp) -> double
41 {
42 if (base == 0 && exp <= 0)
43 {
44 throw valueError();
45 }
46 double res = 1.0;
47 for (int i = 0; i < abs(exp); i += 1)
48 {
49 res *= base;
50 }
51 return exp >= 0 ? res : 1 / res;
52 }
53
54#endif //MATHS_H