protected override string FormatRaw(NumberClass nc) { if (nc.exponent <= beforeSciCut) { return($"{nc.GetRealMantissa():###,##0.##}"); } var expExp = Math.Floor(Math.Log10(nc.exponent)); var ext = nc.exponent % 3; var nMan = nc.mantissa * Math.Pow(10, ext); var nExp = nc.exponent - ext; if (expExp <= beforeSciCutExponent) { return($"{nMan:##0.##}{e}{nExp:###,###}"); } var expMan = nExp / Math.Pow(10, expExp); string GetMantissaIfReasonable() => expExp <= 15 ? $"{nMan:0.00}" : ""; var expExt = expExp % 3; var nExpMan = expMan * Math.Pow(10, expExt); var nExpExp = expExp - expExt; if (cutOff1E && expMan == 1) { return($"{GetMantissaIfReasonable()}{e}{e}{nExpExp:###,###}"); } return($"{GetMantissaIfReasonable()}{e}{nExpMan:##0.00}{e}{nExpExp:###,###}"); }
public NumberClass Pow(NumberClass n) { if (n == One || this == One || this == Zero) { return(this); } if (n == Zero) { return(One); } if (exponent == 0 && n.exponent == 0) { return(Math.Pow(mantissa, n.mantissa)); } var tempExpo = exponent + Math.Log10(mantissa); if (Math.Max(Math.Log10(exponent), 0) + n.exponent < 300) { tempExpo *= n.GetRealMantissa(); return(tempExpo < 1e17 ? new NumberClass(Math.Pow(10, tempExpo % 1), Math.Floor(tempExpo)) : new NumberClass(mantissa, tempExpo)); } tempExpo = Math.Log10(tempExpo); tempExpo += n.exponent + Math.Log10(n.exponent); return(new NumberClass(mantissa, tempExpo)); }