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