712 {
713 if (
value._sign < 0 || baseValue == 1.0)
714 {
715 return double.NaN;
716 }
717 if (baseValue == double.PositiveInfinity)
718 {
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 * 32
L - 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 }