Example #1
0
        private static BigRational GetSquareRoot(BigRational b)
        {
            var s = b;

            for (var i = 0; i < 18; i++)
            {
                b = (b + (s / b)) / BigRational.FromInt(2);
            }

            return(b);
        }
Example #2
0
        // https://en.wikipedia.org/wiki/Chudnovsky_algorithm
        private static BigRational CalculateValue(BigRational maxK)
        {
            var K = BigRational.FromDecimal(6m);
            var M = BigRational.FromDecimal(1m);
            var L = BigRational.FromDecimal(13591409m);
            var X = BigRational.FromDecimal(1m);
            var S = BigRational.FromDecimal(13591409m);

            var sixteen    = BigRational.FromInt(16);
            var L_constant = BigRational.FromInt(545140134);
            var X_constant = BigRational.FromDecimal(-262537412640768000M);
            var twelve     = BigRational.FromInt(12);

            for (var k = BigRational.One; k < (maxK + BigRational.One); k += BigRational.One)
            {
                M  = M * (BigRational.Pow(K, 3) - (K * sixteen)) / BigRational.Pow(k, 3);
                L += L_constant;
                X *= X_constant;
                S += M * L / X;
                K += twelve;
            }

            return(BigRational.FromDecimal(426880m) * GetSquareRoot(BigRational.FromDecimal(10005m)) / S);
        }
Example #3
0
        public override (object, int) Decode(byte[] data, int position, bool packed)
        {
            (BigInteger nominator, int newPosition) = Int256.DecodeInt(data, position, packed);
            BigRational rational = BigRational.FromBigInt(nominator) * BigRational.Reciprocal(BigRational.Pow(BigRational.FromInt(10), Precision));

            return(rational, newPosition);
        }
Example #4
0
        public void Test_ufixed(AbiEncodingStyle encodingStyle)
        {
            AbiUFixed type = AbiType.UFixed;

            BigRational  data      = BigRational.FromBigInt(-123456789) * BigRational.Reciprocal(BigRational.Pow(BigRational.FromInt(10), type.Precision));
            AbiSignature signature = new AbiSignature("abc", type);

            byte[]   encoded   = _abiEncoder.Encode(encodingStyle, signature, data);
            object[] arguments = _abiEncoder.Decode(encodingStyle, signature, encoded);
            Assert.AreEqual(arguments[0], data);
        }