964 {
965 ulong num = 1uL;
966 DiyFp diyFp =
new DiyFp((ulong)(1
L << -w.e), w.e);
967 uint num2 = (uint)(w.f >> -diyFp.e);
968 ulong num3 = w.f & (diyFp.f - 1);
969 if (num3 == 0
L && (requestedDigits >= 11 || num2 <
s_SmallPowersOfTen[requestedDigits - 1]))
970 {
972 kappa = 0;
973 return false;
974 }
977 while (kappa > 0)
978 {
979 uint num5;
980 (num5, num2) = Math.DivRem(num2, num4);
983 requestedDigits--;
984 kappa--;
985 if (requestedDigits == 0)
986 {
987 break;
988 }
989 num4 /= 10;
990 }
991 if (requestedDigits == 0)
992 {
993 ulong rest = ((ulong)num2 << -diyFp.e) + num3;
995 }
996 while (requestedDigits > 0 && num3 > num)
997 {
998 num3 *= 10;
999 num *= 10;
1000 uint num6 = (uint)(num3 >> -diyFp.e);
1003 requestedDigits--;
1004 kappa--;
1005 num3 &= diyFp.f - 1;
1006 }
1007 if (requestedDigits != 0)
1008 {
1011 kappa = 0;
1012 return false;
1013 }
1015 }
static readonly uint[] s_SmallPowersOfTen
static bool TryRoundWeedCounted(Span< byte > buffer, int length, ulong rest, ulong tenKappa, ulong unit, ref int kappa)
static uint BiggestPowerTen(uint number, int numberBits, out int exponentPlusOne)