Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ ConvertBigIntegerToFloatingPointBits()

static ulong System.Number.ConvertBigIntegerToFloatingPointBits ( ref BigInteger value,
in FloatingPointInfo info,
uint integerBitsOfPrecision,
bool hasNonZeroFractionalPart )
inlinestaticprivate

Definition at line 3631 of file Number.cs.

3632 {
3633 int denormalMantissaBits = info.DenormalMantissaBits;
3634 if (integerBitsOfPrecision <= 64)
3635 {
3636 return AssembleFloatingPointBits(in info, value.ToUInt64(), denormalMantissaBits, !hasNonZeroFractionalPart);
3637 }
3638 (uint Quotient, uint Remainder) tuple = Math.DivRem(integerBitsOfPrecision, 32u);
3639 uint item = tuple.Quotient;
3640 uint item2 = tuple.Remainder;
3641 uint num = item - 1;
3642 uint num2 = num - 1;
3643 int num3 = denormalMantissaBits + (int)(num2 * 32);
3644 bool flag = !hasNonZeroFractionalPart;
3645 ulong initialMantissa;
3646 if (item2 == 0)
3647 {
3648 initialMantissa = ((ulong)value.GetBlock(num) << 32) + value.GetBlock(num2);
3649 }
3650 else
3651 {
3652 int num4 = (int)item2;
3653 int num5 = 64 - num4;
3654 int num6 = num5 - 32;
3655 num3 += (int)item2;
3656 uint block = value.GetBlock(num2);
3657 uint num7 = block >> num4;
3658 ulong num8 = (ulong)value.GetBlock(num) << num6;
3659 ulong num9 = (ulong)value.GetBlock(item) << num5;
3660 initialMantissa = num9 + num8 + num7;
3661 uint num10 = (uint)((1 << (int)item2) - 1);
3662 flag = flag && (block & num10) == 0;
3663 }
3664 for (uint num11 = 0u; num11 != num2; num11++)
3665 {
3666 flag &= value.GetBlock(num11) == 0;
3667 }
3668 return AssembleFloatingPointBits(in info, initialMantissa, num3, flag);
3669 }
static ulong AssembleFloatingPointBits(in FloatingPointInfo info, ulong initialMantissa, int initialExponent, bool hasZeroTail)
Definition Number.cs:3577

References System.Number.AssembleFloatingPointBits(), System.Math.DivRem(), System.info, System.item, and System.value.

Referenced by System.Number.NumberToFloatingPointBitsSlow().