3968 {
3969 int num = number.Scale;
3970 if (num > 20 || num < number.DigitsCount || number.IsNegative)
3971 {
3972 return false;
3973 }
3974 byte* digitsPointer = number.GetDigitsPointer();
3975 ulong num2 = 0uL;
3976 while (--num >= 0)
3977 {
3978 if (num2 > 1844674407370955161
L)
3979 {
3980 return false;
3981 }
3982 num2 *= 10;
3983 if (*digitsPointer != 0)
3984 {
3985 ulong num3 = num2 + (ulong)(*(digitsPointer++) - 48);
3986 if (num3 < num2)
3987 {
3988 return false;
3989 }
3990 num2 = num3;
3991 }
3992 }
3994 return true;
3995 }