public override bool Equals(object obj) { if (obj.GetType() != this.GetType()) { return(false); } DoubleNumber dn = (DoubleNumber)obj; return(_num == dn._num); }
private T _Translate(DoubleNumber n) { string chars = n.Annotations["chars"] as string; if (chars != null) { return(__TranslateNumber(n, chars)); } else { return(__Translate(n)); } }
private T _Translate(ComplexNumber n) { IntegerNumber ri = n.Re as IntegerNumber; RationalNumber rr = n.Re as RationalNumber; IntegerNumber ii = n.Im as IntegerNumber; RationalNumber ir = n.Im as RationalNumber; List <T> ts = new List <T>(); if (!((ri != null && ri.Num == 0) || (rr != null && rr.Num == 0))) { ts.Add(Translate(n.Re)); } int? isgn = null; bool?isone = null; bool special = false; if (ii != null) { isgn = ii.Num > 0 ? 1 : ii.Num < 0 ? -1 : 0; isone = ii.Num == 1 || ii.Num == -1; special = true; } else if (ir != null) { isgn = ir.Num > 0 ? 1 : ir.Num < 0 ? -1 : 0; isone = ir.Num == 1 || ir.Num == -1; special = true; } if (special) { if (isgn == 0) { if (ts.Count == 0) { ts.Add(Translate(n.Re)); } } else { if (isone.Value) { if (isgn == 1) { if (ts.Count != 0) { ts.Add(__TranslateOperator(null, '+', Syntax.TType.Op)); } } else { ts.Add(__TranslateOperator(null, Unicode.M.MINUS_SIGN, Syntax.TType.Op)); } } else { if (isgn == 1 && ts.Count != 0) { ts.Add(__TranslateOperator(null, '+', Syntax.TType.Op)); } ts.Add(Translate(n.Im)); } ts.Add(Translate(WellKnownSym.i)); } } else { DoubleNumber dn = (DoubleNumber)n.Im; string im = dn.ToString(); if (im[0] != '-' && ts.Count != 0) { ts.Add(__TranslateOperator(null, '+', Syntax.TType.Op)); } ts.Add(Translate(n.Im)); ts.Add(Translate(WellKnownSym.i)); } return(__WrapTranslatedExpr(n, ts)); }
protected abstract T __Translate(DoubleNumber n);
/* next two constructors are just here so you can use autoconversions */ public ComplexNumber(DoubleNumber re, DoubleNumber im) { _re = re; _im = im; }