1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
use metron_core::{def_exp_scale};

pub mod scale_base {
    use metron_core::{def_exp_scale_base};
    def_exp_scale_base! {
        pub BP1024[f32 = 1024.0, f64 = 1024.0,],
        pub BP1000[f32 = 1000.0, f64 = 1000.0,],
        pub   BP10[f32 =   10.0, f64 =   10.0,],
        pub    BP2[f32 =    2.0, f64 =    2.0,],
    }
}
pub mod scale_exponent {
    use metron_core::{def_exp_scale_exp};
    def_exp_scale_exp! {
        pub   EP80[f32 =   80.0, f64 =   80.0,],
        pub   EP70[f32 =   70.0, f64 =   70.0,],
        pub   EP60[f32 =   60.0, f64 =   60.0,],
        pub   EP50[f32 =   50.0, f64 =   50.0,],
        pub   EP40[f32 =   40.0, f64 =   40.0,],
        pub   EP30[f32 =   30.0, f64 =   30.0,],
        pub   EP24[f32 =   24.0, f64 =   24.0,],
        pub   EP21[f32 =   21.0, f64 =   21.0,],
        pub   EP20[f32 =   20.0, f64 =   20.0,],
        pub   EP18[f32 =   18.0, f64 =   18.0,],
        pub   EP15[f32 =   15.0, f64 =   15.0,],
        pub   EP12[f32 =   12.0, f64 =   12.0,],
        pub   EP10[f32 =   10.0, f64 =   10.0,],
        pub    EP9[f32 =    9.0, f64 =    9.0,],
        pub    EP8[f32 =    8.0, f64 =    8.0,],
        pub    EP7[f32 =    7.0, f64 =    7.0,],
        pub    EP6[f32 =    6.0, f64 =    6.0,],
        pub    EP5[f32 =    5.0, f64 =    5.0,],
        pub    EP4[f32 =    4.0, f64 =    4.0,],
        pub    EP3[f32 =    3.0, f64 =    3.0,],
        pub    EP2[f32 =    2.0, f64 =    2.0,],
        pub    EP1[f32 =    1.0, f64 =    1.0,],
        pub     E0[f32 =    0.0, f64 =    0.0,],
        pub    EM1[f32 = -  1.0, f64 = -  1.0,],
        pub    EM2[f32 = -  2.0, f64 = -  2.0,],
        pub    EM3[f32 = -  3.0, f64 = -  3.0,],
        pub    EM4[f32 = -  4.0, f64 = -  4.0,],
        pub    EM5[f32 = -  5.0, f64 = -  5.0,],
        pub    EM6[f32 = -  6.0, f64 = -  6.0,],
        pub    EM7[f32 = -  7.0, f64 = -  7.0,],
        pub    EM8[f32 = -  8.0, f64 = -  8.0,],
        pub    EM9[f32 = -  9.0, f64 = -  9.0,],
        pub   EM12[f32 = - 12.0, f64 = - 12.0,],
        pub   EM15[f32 = - 15.0, f64 = - 15.0,],
        pub   EM18[f32 = - 18.0, f64 = - 18.0,],
        pub   EM21[f32 = - 21.0, f64 = - 21.0,],
        pub   EM24[f32 = - 24.0, f64 = - 24.0,],
    }
}

use scale_base::*;
use scale_exponent::*;
def_exp_scale! {
    pub One[
        BP2    =^ E0,
        BP10   =^ E0,
        BP1000 =^ E0,
    ] : default BP1000[f64,f64] ,
}
def_exp_scale!{
    pub  Yotta[ BP10 =^ EP24, BP1000 =^ EP8, ] : default BP1000[f64,f64],
    pub  Zetta[ BP10 =^ EP21, BP1000 =^ EP7, ] : default BP1000[f64,f64],
    pub    Exa[ BP10 =^ EP18, BP1000 =^ EP6, ] : default BP1000[f64,f64],
    pub   Peta[ BP10 =^ EP15, BP1000 =^ EP5, ] : default BP1000[f64,f64],
    pub   Tera[ BP10 =^ EP12, BP1000 =^ EP4, ] : default BP1000[f64,f64],
    pub   Giga[ BP10 =^  EP9, BP1000 =^ EP3, ] : default BP1000[f64,f64],
    pub   Mega[ BP10 =^  EP6, BP1000 =^ EP2, ] : default BP1000[f64,f64],
    pub   Kilo[ BP10 =^  EP3, BP1000 =^ EP1, ] : default BP1000[f64,f64],
    pub  Hecto[ BP10 =^  EP2,                ]                          ,
    pub   Deka[ BP10 =^  EP1,                ]                          ,
    pub   Deci[ BP10 =^  EM1,                ]                          ,
    pub  Centi[ BP10 =^  EM2,                ]                          ,
    pub  Milli[ BP10 =^  EM3, BP1000 =^ EM1, ] : default BP1000[f64,f64],
    pub  Micro[ BP10 =^  EM6, BP1000 =^ EM2, ] : default BP1000[f64,f64],
    pub   Nano[ BP10 =^  EM9, BP1000 =^ EM3, ] : default BP1000[f64,f64],
    pub   Pico[ BP10 =^ EM12, BP1000 =^ EM4, ] : default BP1000[f64,f64],
    pub  Femto[ BP10 =^ EM15, BP1000 =^ EM5, ] : default BP1000[f64,f64],
    pub   Atto[ BP10 =^ EM18, BP1000 =^ EM6, ] : default BP1000[f64,f64],
    pub  Zepto[ BP10 =^ EM21, BP1000 =^ EM7, ] : default BP1000[f64,f64],
    pub  Yocto[ BP10 =^ EM24, BP1000 =^ EM8, ] : default BP1000[f64,f64],
}
def_exp_scale!{
    pub   Yobi[ BP2 =^ EP80, BP1024 =^ EP8, ] : default BP1024[f64,f64],
    pub   Zebi[ BP2 =^ EP70, BP1024 =^ EP7, ] : default BP1024[f64,f64],
    pub   Exbi[ BP2 =^ EP60, BP1024 =^ EP6, ] : default BP1024[f64,f64],
    pub   Pebi[ BP2 =^ EP50, BP1024 =^ EP5, ] : default BP1024[f64,f64],
    pub   Tebi[ BP2 =^ EP40, BP1024 =^ EP4, ] : default BP1024[f64,f64],
    pub   Gibi[ BP2 =^ EP30, BP1024 =^ EP3, ] : default BP1024[f64,f64],
    pub   Mebi[ BP2 =^ EP20, BP1024 =^ EP2, ] : default BP1024[f64,f64],
    pub   Kibi[ BP2 =^ EP10, BP1024 =^ EP1, ] : default BP1024[f64,f64],
}