Exemplo n.º 1
0
    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");
        }
    }
Exemplo n.º 2
0
    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));
    }