Example #1
0
        public void GeneralRealNumberTest()
        {
            var no0 = new RealNumber(1L << 62, 4096 / 64);
            var no1 = no0.GetExp();
            var no2 = no1.GetLog();
            var no3 = no0.GetTaylorExp();
            var no4 = no3.GetLog();

            no0 = no0.ChangePrecision(no0.GetPrecisionDigits() - 10);
            no1 = no1.ChangePrecision(no1.GetPrecisionDigits() - 10);
            no2 = no2.ChangePrecision(no2.GetPrecisionDigits() - 10);
            no3 = no3.ChangePrecision(no3.GetPrecisionDigits() - 10);
            no4 = no4.ChangePrecision(no4.GetPrecisionDigits() - 10);

            bool ok = (no2 - no0).IsZero && (no4 - no0).IsZero;

            ulong[] xx = Enumerable.Repeat(ulong.MaxValue, 1024 * 48).ToArray();
            ulong[] yy = Enumerable.Repeat(ulong.MaxValue, 1024 * 48).ToArray();
            ulong[] zz = Enumerable.Repeat((ulong)0, 1024 * 48 * 2).ToArray();
            AsmX64Operations.FastestMultiplication(xx, yy, zz, xx.Length);
            if (zz[0] != 1 || zz[zz.Length / 2 - 1] != 0 || zz[zz.Length / 2] + 2 != 0 || zz[zz.Length - 1] + 1 != 0)
            {
                ok = false;
            }
            Assert.IsTrue(ok);
        }