7 public static void GetDoubleParts(
double dbl, out
int sign, out
int exp, out ulong man, out
bool fFinite)
11 doubleUlong.dbl = dbl;
12 sign = 1 - ((int)(doubleUlong.uu >> 62) & 2);
13 man = doubleUlong.uu & 0xFFFFFFFFFFFFFuL;
14 exp = (int)(doubleUlong.uu >> 52) & 0x7FF;
31 man |= 4503599627370496uL;
39 doubleUlong.dbl = 0.0;
47 man = ((num >= 0) ? (man << num) : (man >> -num));
52 doubleUlong.uu = 9218868437227405312uL;
63 doubleUlong.uu = man >> -exp;
68 doubleUlong.uu = (man & 0xFFFFFFFFFFFFFuL) | (ulong)((long)exp << 52);
73 doubleUlong.uu |= 9223372036854775808uL;
75 return doubleUlong.dbl;
80 if (d !=
null && d.
Length > 0)
84 for (i = 1; d[i - 1] == 0 && i < d.
Length; i++)
97 return ((ulong)uHi << 32) | uLo;
100 public static uint
Abs(
int a)
102 uint num = (uint)(a >> 31);
103 return ((uint)a ^ num) - num;
108 return ((u1 << 7) | (u1 >> 25)) ^ u2;
123 if ((u & 0xFFFF0000u) == 0)
128 if ((u & 0xFF000000u) == 0)
133 if ((u & 0xF0000000u) == 0)
138 if ((u & 0xC0000000u) == 0)
143 if ((u & 0x80000000u) == 0)
152 if ((uu & 0xFFFFFFFF00000000uL) == 0
L)
static int CbitHighZero(uint u)
static uint CombineHash(uint u1, uint u2)
static double GetDoubleFromParts(int sign, int exp, ulong man)
static void GetDoubleParts(double dbl, out int sign, out int exp, out ulong man, out bool fFinite)
static int CbitHighZero(ulong uu)
static ulong MakeUlong(uint uHi, uint uLo)
static void DangerousMakeTwosComplement(Span< uint > d)
static int CombineHash(int n1, int n2)