37 {
38 Unsafe.SkipInit(out DoubleUlong doubleUlong);
39 doubleUlong.dbl = 0.0;
41 {
42 doubleUlong.uu = 0uL;
43 }
44 else
45 {
47 man = ((num >= 0) ? (man << num) : (man >> -num));
48 exp -= num;
49 exp += 1075;
50 if (exp >= 2047)
51 {
52 doubleUlong.uu = 9218868437227405312uL;
53 }
54 else if (exp <= 0)
55 {
56 exp--;
57 if (exp < -52)
58 {
59 doubleUlong.uu = 0uL;
60 }
61 else
62 {
63 doubleUlong.uu = man >> -exp;
64 }
65 }
66 else
67 {
68 doubleUlong.uu = (man & 0xFFFFFFFFFFFFFuL) | (ulong)((long)exp << 52);
69 }
70 }
71 if (sign < 0)
72 {
73 doubleUlong.uu |= 9223372036854775808uL;
74 }
75 return doubleUlong.dbl;
76 }
static int CbitHighZero(uint u)