public static SimpleBigDecimal Norm(sbyte mu, SimpleBigDecimal u, SimpleBigDecimal v) { SimpleBigDecimal simpleBigDecimal = u.Multiply(u); SimpleBigDecimal b = u.Multiply(v); SimpleBigDecimal b2 = v.Multiply(v).ShiftLeft(1); switch (mu) { case 1: return(simpleBigDecimal.Add(b).Add(b2)); case -1: return(simpleBigDecimal.Subtract(b).Add(b2)); default: throw new ArgumentException("mu must be 1 or -1"); } }
public static ZTauElement Round(SimpleBigDecimal lambda0, SimpleBigDecimal lambda1, sbyte mu) { int scale = lambda0.Scale; if (lambda1.Scale != scale) { throw new ArgumentException("lambda0 and lambda1 do not have same scale"); } if (mu != 1 && mu != -1) { throw new ArgumentException("mu must be 1 or -1"); } BigInteger bigInteger = lambda0.Round(); BigInteger bigInteger2 = lambda1.Round(); SimpleBigDecimal simpleBigDecimal = lambda0.Subtract(bigInteger); SimpleBigDecimal simpleBigDecimal2 = lambda1.Subtract(bigInteger2); SimpleBigDecimal simpleBigDecimal3 = simpleBigDecimal.Add(simpleBigDecimal); simpleBigDecimal3 = ((mu != 1) ? simpleBigDecimal3.Subtract(simpleBigDecimal2) : simpleBigDecimal3.Add(simpleBigDecimal2)); SimpleBigDecimal simpleBigDecimal4 = simpleBigDecimal2.Add(simpleBigDecimal2).Add(simpleBigDecimal2); SimpleBigDecimal b = simpleBigDecimal4.Add(simpleBigDecimal2); SimpleBigDecimal simpleBigDecimal5; SimpleBigDecimal simpleBigDecimal6; if (mu == 1) { simpleBigDecimal5 = simpleBigDecimal.Subtract(simpleBigDecimal4); simpleBigDecimal6 = simpleBigDecimal.Add(b); } else { simpleBigDecimal5 = simpleBigDecimal.Add(simpleBigDecimal4); simpleBigDecimal6 = simpleBigDecimal.Subtract(b); } sbyte b2 = 0; sbyte b3 = 0; if (simpleBigDecimal3.CompareTo(BigInteger.One) >= 0) { if (simpleBigDecimal5.CompareTo(MinusOne) < 0) { b3 = mu; } else { b2 = 1; } } else if (simpleBigDecimal6.CompareTo(BigInteger.Two) >= 0) { b3 = mu; } if (simpleBigDecimal3.CompareTo(MinusOne) < 0) { if (simpleBigDecimal5.CompareTo(BigInteger.One) >= 0) { b3 = (sbyte)(-mu); } else { b2 = -1; } } else if (simpleBigDecimal6.CompareTo(MinusTwo) < 0) { b3 = (sbyte)(-mu); } BigInteger u = bigInteger.Add(BigInteger.ValueOf(b2)); BigInteger v = bigInteger2.Add(BigInteger.ValueOf(b3)); return(new ZTauElement(u, v)); }