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

◆ Log() [2/2]

static double System.Numerics.BigInteger.Log ( BigInteger value,
double baseValue )
inlinestatic

Definition at line 711 of file BigInteger.cs.

712 {
713 if (value._sign < 0 || baseValue == 1.0)
714 {
715 return double.NaN;
716 }
717 if (baseValue == double.PositiveInfinity)
718 {
719 if (!value.IsOne)
720 {
721 return double.NaN;
722 }
723 return 0.0;
724 }
725 if (baseValue == 0.0 && !value.IsOne)
726 {
727 return double.NaN;
728 }
729 if (value._bits == null)
730 {
731 return Math.Log(value._sign, baseValue);
732 }
733 ulong num = value._bits[value._bits.Length - 1];
734 ulong num2 = ((value._bits.Length > 1) ? value._bits[value._bits.Length - 2] : 0u);
735 ulong num3 = ((value._bits.Length > 2) ? value._bits[value._bits.Length - 3] : 0u);
736 int num4 = NumericsHelpers.CbitHighZero((uint)num);
737 long num5 = (long)value._bits.Length * 32L - num4;
738 ulong num6 = (num << 32 + num4) | (num2 << num4) | (num3 >> 32 - num4);
739 return Math.Log(num6, baseValue) + (double)(num5 - 64) / Math.Log(baseValue, 2.0);
740 }

References System.Numerics.NumericsHelpers.CbitHighZero(), System.L, System.Math.Log(), and System.value.