public double ToDouble() { if (IsNaN(this)) { return(double.NaN); } if (Exponent > DoubleExpMax) { return(Mantissa > 0 ? double.PositiveInfinity : double.NegativeInfinity); } if (Exponent < DoubleExpMin) { return(0.0); } //SAFETY: again, handle 5e-324, -5e-324 separately if (Exponent == DoubleExpMin) { return(Mantissa > 0 ? 5e-324 : -5e-324); } var result = Mantissa * PowersOf10.Lookup(Exponent); if (!IsFinite(result) || Exponent < 0) { return(result); } var resultrounded = Math.Round(result); if (Math.Abs(resultrounded - result) < 1e-10) { return(resultrounded); } return(result); }