1548 {
1549 int sign =
value._sign;
1550 uint[] bits =
value._bits;
1551 if (bits == null)
1552 {
1553 return sign;
1554 }
1555 int num = bits.Length;
1556 if (num > 32)
1557 {
1558 if (sign == 1)
1559 {
1560 return double.PositiveInfinity;
1561 }
1562 return double.NegativeInfinity;
1563 }
1564 ulong num2 = bits[num - 1];
1565 ulong num3 = ((num > 1) ? bits[num - 2] : 0u);
1566 ulong num4 = ((num > 2) ? bits[num - 3] : 0u);
1567 int num5 = NumericsHelpers.CbitHighZero((uint)num2);
1568 int exp = (num - 2) * 32 - num5;
1569 ulong man = (num2 << 32 + num5) | (num3 << num5) | (num4 >> 32 - num5);
1570 return NumericsHelpers.GetDoubleFromParts(sign, exp, man);
1571 }