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); }
// 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); }
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); }
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); }