Iros
 
Loading...
Searching...
No Matches
ratio.h
Go to the documentation of this file.
1#pragma once
2
4#include "di/meta/constexpr.h"
5#include "di/types/prelude.h"
6
7namespace di::math {
8#ifdef DI_HAVE_128_BIT_INTEGERS
9using ratio_intmax_t = i128;
10#else
12#endif
13
14template<ratio_intmax_t numerator, ratio_intmax_t denominator = 1>
15struct Ratio;
16
17namespace detail {
18 template<typename T>
19 constexpr inline bool is_ratio = false;
20
21 template<ratio_intmax_t x, ratio_intmax_t y>
22 constexpr inline bool is_ratio<Ratio<x, y>> = true;
23
24 template<typename T>
26}
27
28template<Rational<ratio_intmax_t> rational>
29using RatioFromRational = Ratio<rational.numerator(), rational.denominator()>;
30
31template<ratio_intmax_t numerator, ratio_intmax_t denominator>
32struct Ratio {
33 constexpr static ratio_intmax_t num = numerator;
34 constexpr static ratio_intmax_t den = denominator;
35
37
39};
40
41template<detail::IsRatio A, detail::IsRatio B>
43
44template<detail::IsRatio A, detail::IsRatio B>
45using RatioSubtract = RatioFromRational<A::rational - B::rational>;
46
47template<detail::IsRatio A, detail::IsRatio B>
49
50template<detail::IsRatio A, detail::IsRatio B>
51using RatioDivide = RatioFromRational<A::rational / B::rational>;
52
53template<detail::IsRatio A, detail::IsRatio B>
55
56template<detail::IsRatio A, detail::IsRatio B>
58
59template<detail::IsRatio A, detail::IsRatio B>
60using RatioLess = Constexpr<(A::rational < B::rational)>;
61
62template<detail::IsRatio A, detail::IsRatio B>
63using RatioLessEqual = Constexpr<(A::rational <= B::rational)>;
64
65template<detail::IsRatio A, detail::IsRatio B>
66using RatioGreater = Constexpr<(A::rational > B::rational)>;
67
68template<detail::IsRatio A, detail::IsRatio B>
69using RatioGreaterEqual = Constexpr<(A::rational >= B::rational)>;
70
71#ifdef DI_HAVE_128_BIT_INTEGERS
72using Yocto = Ratio<1, ratio_intmax_t(1000000000000000000) * ratio_intmax_t(1000000)>;
73using Zepto = Ratio<1, ratio_intmax_t(1000000000000000000) * ratio_intmax_t(1000)>;
74#endif
91#ifdef DI_HAVE_128_BIT_INTEGERS
92using Yetta = Ratio<ratio_intmax_t(1000000000000000000) * ratio_intmax_t(1000)>;
93using Yotta = Ratio<ratio_intmax_t(1000000000000000000) * ratio_intmax_t(1000000)>;
94#endif
95}
96
97namespace di {
98using math::Ratio;
99
100using math::RatioAdd;
104
105using math::RatioEqual;
108using math::RatioLess;
111}
Definition rational.h:9
Definition ratio.h:25
Definition abs.h:11
constexpr bool is_ratio
Definition ratio.h:19
Definition abs.h:10
i64 ratio_intmax_t
Definition ratio.h:11
Ratio< rational.numerator(), rational.denominator()> RatioFromRational
Definition ratio.h:29
Ratio< 1000000000000000 > Peta
Definition ratio.h:89
RatioFromRational< A::rational - B::rational > RatioSubtract
Definition ratio.h:45
Ratio< 1000000 > Mega
Definition ratio.h:86
RatioFromRational< A::rational+B::rational > RatioAdd
Definition ratio.h:42
Ratio< 1, 10 > Deci
Definition ratio.h:82
Constexpr<(A::rational > B::rational)> RatioGreater
Definition ratio.h:66
Ratio< 1, 1000000000 > Nano
Definition ratio.h:78
Constexpr< A::rational !=B::rational > RatioNotEqual
Definition ratio.h:57
Ratio< 1000000000000000000 > Exa
Definition ratio.h:90
RatioFromRational< A::rational *B::rational > RatioMultiply
Definition ratio.h:48
Ratio< 1, 1000000000000000 > Femto
Definition ratio.h:76
Ratio< 1, 100 > Centi
Definition ratio.h:81
Ratio< 1, 1000000000000000000 > Atto
Definition ratio.h:75
Ratio< 1, 1000 > Milli
Definition ratio.h:80
Ratio< 1, 1000000 > Micro
Definition ratio.h:79
Constexpr<(A::rational >=B::rational)> RatioGreaterEqual
Definition ratio.h:69
Ratio< 1000000000000 > Tera
Definition ratio.h:88
Ratio< 1000000000 > Giga
Definition ratio.h:87
Ratio< 100 > Hecto
Definition ratio.h:84
RatioFromRational< A::rational/B::rational > RatioDivide
Definition ratio.h:51
Ratio< 1, 1000000000000 > Pico
Definition ratio.h:77
Ratio< 1000 > Kilo
Definition ratio.h:85
Constexpr< A::rational==B::rational > RatioEqual
Definition ratio.h:54
Constexpr<(A::rational< B::rational)> RatioLess
Definition ratio.h:60
Ratio< 10 > Deca
Definition ratio.h:83
Constexpr<(A::rational<=B::rational)> RatioLessEqual
Definition ratio.h:63
__INT64_TYPE__ i64
Definition integers.h:17
Definition zstring_parser.h:9
Definition ratio.h:32
static constexpr ratio_intmax_t num
Definition ratio.h:33
static constexpr Rational< ratio_intmax_t > rational
Definition ratio.h:36
RatioFromRational< rational > Type
Definition ratio.h:38
static constexpr ratio_intmax_t den
Definition ratio.h:34
A wrapper for a constexpr value.
Definition core.h:77