3578 {
3579 uint num =
BigInteger.CountSignificantBits(initialMantissa);
3580 int num2 = (int)(
info.NormalMantissaBits - num);
3581 int num3 = initialExponent - num2;
3582 ulong num4 = initialMantissa;
3583 int num5 = num3;
3584 if (num3 >
info.MaxBinaryExponent)
3585 {
3586 return info.InfinityBits;
3587 }
3588 if (num3 <
info.MinBinaryExponent)
3589 {
3590 int num6 = num2 + num3 + info.ExponentBias - 1;
3591 num5 = -
info.ExponentBias;
3592 if (num6 < 0)
3593 {
3596 {
3597 return info.ZeroBits;
3598 }
3599 if (num4 >
info.DenormalMantissaMask)
3600 {
3601 num5 = initialExponent - (num6 + 1) - num2;
3602 }
3603 }
3604 else
3605 {
3606 num4 <<= num6;
3607 }
3608 }
3609 else if (num2 < 0)
3610 {
3612 if (num4 >
info.NormalMantissaMask)
3613 {
3614 num4 >>= 1;
3615 num5++;
3616 if (num5 >
info.MaxBinaryExponent)
3617 {
3618 return info.InfinityBits;
3619 }
3620 }
3621 }
3622 else if (num2 > 0)
3623 {
3624 num4 <<= num2;
3625 }
3626 num4 &=
info.DenormalMantissaMask;
3627 ulong num7 = (ulong)((
long)(num5 +
info.ExponentBias) << (
int)
info.DenormalMantissaBits);
3628 return num7 | num4;
3629 }
static ulong RightShiftWithRounding(ulong value, int shift, bool hasZeroTail)