3
3
4
4
// implements multiprecision math for random number generators
5
5
6
- #include < limits>
7
- #include < random>
6
+ #include < yvals.h>
8
7
9
8
_STD_BEGIN
10
- constexpr int shift = _STD numeric_limits<unsigned long long >::digits / 2 ;
9
+ constexpr int _MP_len = 5 ;
10
+ using _MP_arr = unsigned long long [_MP_len];
11
+
12
+ constexpr int shift = 64 / 2 ;
11
13
constexpr unsigned long long mask = ~(~0ULL << shift);
12
14
constexpr unsigned long long maxVal = mask + 1 ;
13
15
14
- [[nodiscard]] unsigned long long __CLRCALL_PURE_OR_CDECL _MP_Get (
16
+ // TRANSITION, ABI: preserved for binary compatibility
17
+ [[nodiscard]] _CRTIMP2_PURE unsigned long long __CLRCALL_PURE_OR_CDECL _MP_Get (
15
18
_MP_arr u) noexcept { // convert multi-word value to scalar value
16
19
return (u[1 ] << shift) + u[0 ];
17
20
}
@@ -32,7 +35,8 @@ static void add(unsigned long long* u, int ulen, unsigned long long* v,
32
35
}
33
36
}
34
37
35
- void __CLRCALL_PURE_OR_CDECL _MP_Add (
38
+ // TRANSITION, ABI: preserved for binary compatibility
39
+ _CRTIMP2_PURE void __CLRCALL_PURE_OR_CDECL _MP_Add (
36
40
_MP_arr u, unsigned long long v0) noexcept { // add scalar value to multi-word value
37
41
unsigned long long v[2 ];
38
42
v[0 ] = v0 & mask;
@@ -50,7 +54,8 @@ static void mul(
50
54
}
51
55
}
52
56
53
- void __CLRCALL_PURE_OR_CDECL _MP_Mul (
57
+ // TRANSITION, ABI: preserved for binary compatibility
58
+ _CRTIMP2_PURE void __CLRCALL_PURE_OR_CDECL _MP_Mul (
54
59
_MP_arr w, unsigned long long u0, unsigned long long v0) noexcept { // multiply multi-word value by multi-word value
55
60
constexpr int m = 2 ;
56
61
constexpr int n = 2 ;
@@ -106,7 +111,8 @@ static void div(_MP_arr u,
106
111
return ulen;
107
112
}
108
113
109
- void __CLRCALL_PURE_OR_CDECL _MP_Rem (
114
+ // TRANSITION, ABI: preserved for binary compatibility
115
+ _CRTIMP2_PURE void __CLRCALL_PURE_OR_CDECL _MP_Rem (
110
116
_MP_arr u, unsigned long long v0) noexcept { // divide multi-word value by value, leaving remainder in u
111
117
unsigned long long v[2 ];
112
118
v[0 ] = v0 & mask;
0 commit comments