示例#1
0
        public void encodeDecodeSlof()
        {
            Random random = new Random();
            int    n      = 1000;

            double[] ics = new double[n];
            for (int i = 0; i < n; i++)
            {
                ics[i] = Math.Pow(10, 6 * random.NextDouble());
            }

            byte[] encoded      = new byte[n * 2 + 8];
            double fixedPoint   = MSNumpress.optimalSlofFixedPoint(ics, n);
            int    encodedBytes = MSNumpress.encodeSlof(ics, n, encoded, fixedPoint);

            double[] decoded        = new double[n];
            int      decodedDoubles = MSNumpress.decodeSlof(encoded, encodedBytes, decoded);

            Assert.AreEqual(n, decodedDoubles);

            for (int i = 0; i < n; i++)
            {
                Assert.AreEqual(0.0, (ics[i] - decoded[i]) / ((ics[i] + decoded[i]) / 2), 0.0005);
            }
        }
示例#2
0
        public void LargeNegativesTest()
        {
            Random random = new Random();
            int    n      = 5;

            double[] ics        = new double[] { -1000, 1000, -2000, 2000, -3000 };
            double   fixedPoint = MSNumpress.optimalSlofFixedPoint(ics, n);

            Assert.AreNotEqual(fixedPoint, Double.NaN);
        }
示例#3
0
        public void NegativesOneTest()
        {
            Random random = new Random();
            int    n      = 5;

            double[] ics        = new double[] { -1, 1, -2, 2, -3 };
            double   fixedPoint = MSNumpress.optimalSlofFixedPoint(ics, n);

            Assert.AreNotEqual(fixedPoint, Double.NaN);

            ics        = new double[] { -1.001, 1.001, -2.001, 2.001, -3.001 };
            fixedPoint = MSNumpress.optimalSlofFixedPoint(ics, n);
            Assert.AreNotEqual(fixedPoint, Double.NaN);

            ics        = new double[] { -.99, .99, -1.99, 1.99, -2.99 };
            fixedPoint = MSNumpress.optimalSlofFixedPoint(ics, n);
            Assert.AreNotEqual(fixedPoint, Double.NaN);
        }
示例#4
0
        public void encodeDecodeSlof5()
        {
            Random random = new Random();
            int    n      = 1000;

            double[] ics = new double[n];
            for (int i = 0; i < n; i++)
            {
                ics[i] = Math.Pow(10, 6 * random.NextDouble());
            }

            byte[]   encoded      = new byte[n * 2 + 8];
            double[] decoded      = new double[n];
            double[] firstDecoded = new double[n];
            double   fixedPoint   = MSNumpress.optimalSlofFixedPoint(ics, n);

            int encodedBytes   = MSNumpress.encodeSlof(ics, n, encoded, fixedPoint);
            int decodedDoubles = MSNumpress.decodeSlof(encoded, encodedBytes, decoded);

            for (int i = 0; i < n; i++)
            {
                firstDecoded[i] = decoded[i];
            }

            for (int i = 0; i < 5; i++)
            {
                MSNumpress.encodeSlof(decoded, n, encoded, fixedPoint);
                MSNumpress.decodeSlof(encoded, encodedBytes, decoded);
            }

            Assert.AreEqual(n, decodedDoubles);

            for (int i = 0; i < n; i++)
            {
                Assert.AreEqual(firstDecoded[i], decoded[i], double.Epsilon);
            }
        }