32 private static readonly uint[]
s_rgulShiftBase =
new uint[9] { 10
u, 100
u, 1000
u, 10000
u, 100000
u, 1000000
u, 10000000
u, 100000000
u, 1000000000
u };
36 10
u, 100
u, 1000
u, 10000
u, 100000
u, 1000000
u, 10000000
u, 100000000
u, 1000000000
u, 1410065408
u,
37 1215752192
u, 3567587328
u, 1316134912
u, 276447232
u, 2764472320
u, 1874919424
u, 1569325056
u, 2808348672
u, 2313682944
u, 1661992960
u,
38 3735027712
u, 2990538752
u, 4135583744
u, 2701131776
u, 1241513984
u, 3825205248
u, 3892314112
u, 268435456
u, 2684354560
u, 1073741824
u,
39 2147483648
u, 0
u, 0
u, 0
u, 0
u, 0
u, 0
u, 0
u
44 0
u, 0
u, 0
u, 0
u, 0
u, 0
u, 0
u, 0
u, 0
u, 2
u,
45 23
u, 232
u, 2328
u, 23283
u, 232830
u, 2328306
u, 23283064
u, 232830643
u, 2328306436
u, 1808227885
u,
46 902409669
u, 434162106
u, 46653770
u, 466537709
u, 370409800
u, 3704098002
u, 2681241660
u, 1042612833
u, 1836193738
u, 1182068202
u,
47 3230747430
u, 2242703233
u, 952195850
u, 932023908
u, 730304488
u, 3008077584
u, 16004768
u, 160047680
u
52 0
u, 0
u, 0
u, 0
u, 0
u, 0
u, 0
u, 0
u, 0
u, 0
u,
53 0
u, 0
u, 0
u, 0
u, 0
u, 0
u, 0
u, 0
u, 0
u, 5
u,
54 54
u, 542
u, 5421
u, 54210
u, 542101
u, 5421010
u, 54210108
u, 542101086
u, 1126043566
u, 2670501072
u,
55 935206946
u, 762134875
u, 3326381459
u, 3199043520
u, 1925664130
u, 2076772117
u, 3587851993
u, 1518781562
u
60 0
u, 0
u, 0
u, 0
u, 0
u, 0
u, 0
u, 0
u, 0
u, 0
u,
61 0
u, 0
u, 0
u, 0
u, 0
u, 0
u, 0
u, 0
u, 0
u, 0
u,
62 0
u, 0
u, 0
u, 0
u, 0
u, 0
u, 0
u, 0
u, 1
u, 12
u,
63 126
u, 1262
u, 12621
u, 126217
u, 1262177
u, 12621774
u, 126217744
u, 1262177448
u
142 byte[]
array =
new byte[16]
144 (byte)((uint)data & 0xFF
u),
162 array[1] = (byte)((uint)data & 0xFF
u);
164 array[2] = (byte)((uint)data & 0xFF
u);
166 array[3] = (byte)((uint)data & 0xFF
u);
167 array[4] = (byte)((uint)data2 & 0xFF
u);
169 array[5] = (byte)((uint)data2 & 0xFF
u);
171 array[6] = (byte)((uint)data2 & 0xFF
u);
173 array[7] = (byte)((uint)data2 & 0xFF
u);
194 1, 1, 1, 1, 1, 1, 1, 1, 1, 2,
195 2, 2, 2, 2, 2, 2, 2, 2, 2, 3,
196 3, 3, 3, 3, 3, 3, 3, 3, 4, 4,
197 4, 4, 4, 4, 4, 4, 4, 4
235 num = ((
num2 >=
array[num]) ? (num + 1) : (num - 1));
245 num = ((
num2 >=
array[num]) ? (num + 1) : (num - 1));
255 byte b = (byte)(num + 1);
265 int num =
checked(precision - 1);
321 _bScale = (byte)((
int)(num & 0xFF0000) >> 16);
329 uint data = (uint)
value;
335 data = (uint)(-
value);
348 ulong num = (ulong)
value;
354 num = (ulong)(-
value);
358 _data2 = (uint)(num >> 32);
372 if (bits.Length != 4)
383 for (
int num = 3; num >= 0; num--)
387 _bLen = (byte)(num + 1);
636 char[]
array =
s.ToCharArray();
637 int num =
array.Length;
643 while (num != 0 &&
array[num - 1] ==
' ')
681 if (num == 0 || num > 39)
691 for (i = 0; i < num; i++)
695 if (c >=
'0' && c <=
'9')
698 @
null.MultByULong(10
u);
702 if (c ==
'.' &&
num2 < 0)
742 num = num * 4294967296.0 + (double)
_data3;
743 num = num * 4294967296.0 + (double)
_data2;
744 num = num * 4294967296.0 + (double)
_data1;
817 int val = num +
num2 + 1;
819 if (val - num <
num2)
846 for (i = 0; i <
num3 || i <
bLen; i++)
882 ulong
num4 = 4294967296
uL;
883 for (
int i = 0; i <
num3 || i <
bLen; i++)
899 num4 += uint.MaxValue;
950 for (
int i = 0; i < x.
_bLen; i++)
1216 if ((ulong)
_data3 == 1518781562)
1218 return (
long)
_data2 >= 160047680
L;
1229 if ((
long)
rglData[3] >= 1262177448
L)
1233 if ((ulong)
rglData[2] == 1518781562)
1235 return (
long)
rglData[1] >= 160047680
L;
1246 int num = ((
value < 10000) ? ((
value >= 100) ? ((
value >= 1000) ? 4 : 3) : ((
value < 10) ? 1 : 2)) : ((
value >= 100000000) ? ((
value >= 1000000000) ? 10 : 9) : ((
value >= 1000000) ? ((
value >= 10000000) ? 8 : 7) : ((
value >= 100000) ? 6 : 5))));
1255 num = ((
dwlVal < 10000000000000000
L) ? ((
dwlVal < 1000000000000
L) ? ((
dwlVal >= 10000000000
L) ? ((
dwlVal >= 100000000000
L) ? 12 : 11) : ((
dwlVal >= 1000000000) ? 10 : 9)) : ((
dwlVal >= 100000000000000
L) ? ((
dwlVal >= 1000000000000000
L) ? 16 : 15) : ((
dwlVal >= 10000000000000
L) ? 14 : 13))) : ((
dwlVal >= 1000000000000000000
L) ? ((
dwlVal >= 10000000000000000000
uL) ? 20 : 19) : ((
dwlVal >= 100000000000000000
L) ? 18 : 17)));
1260 num = ((
num2 < 10000) ? ((
num2 >= 100) ? ((
num2 >= 1000) ? 4 : 3) : ((
num2 < 10) ? 1 : 2)) : ((
num2 >= 1000000) ? ((
num2 >= 10000000) ? 8 : 7) : ((
num2 >= 100000) ? 6 : 5)));
1303 for (
int i = 0; i <
bLen; i++)
1309 span[i] = (uint)num;
1310 num = (num >> 32) +
num2;
1345 if (flag &&
num3 == 0)
1448 int digits = scale - result.
_bScale;
1499 for (
int i = 0; i <
ciulS; i++)
1523 for (i = 0; i <
ciulD; i++)
1553 internal static ulong
DWL(uint lo, uint
hi)
1555 return lo + ((ulong)
hi << 32);
1558 private static uint
HI(ulong x)
1560 return (uint)(x >> 32);
1563 private static uint
LO(ulong x)
1595 ulong x = num /
num2;
1598 ciulQ = ((
HI(x) == 0) ? 1 : 2);
1602 ciulR = ((
HI(x) == 0) ? 1 : 2);
1622 uint
num5 = (uint)(4294967296
uL / (ulong)((long)
num3 + 1
L));
2104 int scale =
n.Scale;
2105 double x =
n.ToDouble();
2107 n.AdjustScale(scale -
n.Scale,
fRound:
true);
2175 for (
int i = 0; i <
bLen; i++)
2213 writer.WriteAttributeString(
"xsi",
"nil",
"http://www.w3.org/2001/XMLSchema-instance",
"true");
2223 return new XmlQualifiedName(
"decimal",
"http://www.w3.org/2001/XMLSchema");
static Exception WrongType(Type got, Type expected)
static string DivideByZeroMessage
static string InvalidPrecScaleMessage
static string ArithOverflowMessage
static string ConversionOverflowMessage
static string FormatMessage
static string InvalidArraySizeMessage
static byte Min(byte val1, byte val2)
static double Pow(double x, double y)
static double Abs(double value)
static double Floor(double d)
static byte Max(byte val1, byte val2)
static bool ToBoolean(string s)
string? GetAttribute(string name)
virtual string ReadElementString()
void WriteXml(XmlWriter writer)
void ReadXml(XmlReader reader)
static readonly SqlBoolean Null
SqlDecimal(ReadOnlySpan< uint > rglData, byte bLen, byte bPrec, byte bScale, bool fPositive)
static SqlDecimal Power(SqlDecimal n, double exp)
static readonly uint[] s_decimalHelpersLo
static SqlBoolean Equals(SqlDecimal x, SqlDecimal y)
uint DivByULong(uint iDivisor)
static ulong DWL(uint lo, uint hi)
static readonly uint[] s_decimalHelpersHiHi
static SqlBoolean GreaterThan(SqlDecimal x, SqlDecimal y)
static void MpMove(ReadOnlySpan< uint > rgulS, int ciulS, Span< uint > rgulD, out int ciulD)
static SqlDecimal operator/(SqlDecimal x, SqlDecimal y)
SqlDecimal(decimal value)
static SqlDecimal Round(SqlDecimal n, int lPosition, bool fTruncate)
static SqlDecimal Floor(SqlDecimal n)
static SqlBoolean operator!=(SqlDecimal x, SqlDecimal y)
int LAbsCmp(SqlDecimal snumOp)
static SqlBoolean LessThanOrEqual(SqlDecimal x, SqlDecimal y)
static readonly uint[] s_decimalHelpersMid
int CompareTo(SqlDecimal value)
static SqlBoolean operator<=(SqlDecimal x, SqlDecimal y)
static SqlDecimal Parse(string s)
static char ChFromDigit(uint uiDigit)
override string ToString()
static byte BGetPrecUI4(uint value)
static SqlDecimal operator*(SqlDecimal x, SqlDecimal y)
static void MpSet(Span< uint > rgulD, out int ciulD, uint iulN)
SqlDecimal(byte bPrecision, byte bScale, bool fPositive, int[] bits)
static SqlBoolean operator>(SqlDecimal x, SqlDecimal y)
static SqlDecimal Truncate(SqlDecimal n, int position)
static SqlDecimal AdjustScale(SqlDecimal n, int digits, bool fRound)
static SqlBoolean operator<(SqlDecimal x, SqlDecimal y)
static SqlInt32 Sign(SqlDecimal n)
static readonly uint[] s_decimalHelpersHi
static SqlDecimal operator+(SqlDecimal x, SqlDecimal y)
int CompareTo(object? value)
static SqlBoolean operator>=(SqlDecimal x, SqlDecimal y)
static SqlBoolean LessThan(SqlDecimal x, SqlDecimal y)
static ReadOnlySpan< byte > RgCLenFromPrec
static readonly SqlDecimal Null
static void CheckValidPrecScale(int iPrec, int iScale)
static SqlDecimal Round(SqlDecimal n, int position)
static SqlDecimal ConvertToPrecScale(SqlDecimal n, int precision, int scale)
static XmlQualifiedName GetXsdType(XmlSchemaSet schemaSet)
override bool Equals([NotNullWhen(true)] object? value)
static void MpDiv(ReadOnlySpan< uint > rgulU, int ciulU, Span< uint > rgulD, int ciulD, Span< uint > rgulQ, out int ciulQ, Span< uint > rgulR, out int ciulR)
static readonly byte MaxScale
static SqlDecimal Add(SqlDecimal x, SqlDecimal y)
static readonly byte MaxPrecision
void AdjustScale(int digits, bool fRound)
static SqlDecimal Abs(SqlDecimal n)
static SqlDecimal Subtract(SqlDecimal x, SqlDecimal y)
static SqlDecimal Multiply(SqlDecimal x, SqlDecimal y)
void MultByULong(uint uiMultiplier)
override int GetHashCode()
SqlBoolean ToSqlBoolean()
static readonly SqlDecimal MinValue
static readonly uint[] s_rgulShiftBase
static void CheckValidPrecScale(byte bPrec, byte bScale)
static void MpDiv1(Span< uint > rgulU, ref int ciulU, uint iulD, out uint iulR)
static byte BGetPrecUI8(ulong dwlVal)
static SqlBoolean operator==(SqlDecimal x, SqlDecimal y)
void AddULong(uint ulAdd)
bool VerifyPrecision(byte precision)
static SqlDecimal Divide(SqlDecimal x, SqlDecimal y)
static SqlBoolean NotEquals(SqlDecimal x, SqlDecimal y)
void SetSignBit(bool fPositive)
static SqlDecimal operator-(SqlDecimal x)
static byte CLenFromPrec(byte bPrec)
bool FGt10_38(Span< uint > rglData)
static void MpMul1(Span< uint > piulD, ref int ciulD, uint iulX)
static void ZeroToMaxLen(Span< uint > rgulData, int cUI4sCur)
byte CalculatePrecision()
static void MpNormalize(ReadOnlySpan< uint > rgulU, ref int ciulU)
static SqlDecimal Ceiling(SqlDecimal n)
void MakeInteger(out bool fFraction)
void StoreFromWorkingArray(ReadOnlySpan< uint > rguiData)
static readonly SqlDecimal MaxValue
SqlDecimal(byte bPrecision, byte bScale, bool fPositive, int data1, int data2, int data3, int data4)
EComparison CompareNm(SqlDecimal snumOp)
static SqlBoolean GreaterThanOrEqual(SqlDecimal x, SqlDecimal y)
static readonly SqlInt32 Null
static readonly SqlInt32 Zero