public static void TestKahanSummation()
		{
			double s = 0.0;
			for (int i = 0; i < 10000; i++)
			{
				if (i == 0)
				{
					s += 1e6;
				}
				else
				{
					s += 1e-7;
				}
			}
			double trueAnswer = 1e6 + 9999 * 1e-7;
			NUnit.Framework.Assert.IsTrue(System.Math.Abs(s - trueAnswer) > 1e-9);
			// precision loss
			com.esri.core.geometry.MathUtils.KahanSummator sum = new com.esri.core.geometry.MathUtils.KahanSummator(0);
			for (int i_1 = 0; i_1 < 10000; i_1++)
			{
				if (i_1 == 0)
				{
					sum.Add(1e6);
				}
				else
				{
					sum.Add(1e-7);
				}
			}
			double kahanResult = sum.GetResult();
			// 1000000.0009999000 //C++
			// 1000000.0009999 //Java
			NUnit.Framework.Assert.IsTrue(kahanResult == trueAnswer);
		}
예제 #2
0
        public static void testKahanSummation()
        {
            double s = 0.0;

            for (int i = 0; i < 10000; i++)
            {
                if (i == 0)
                {
                    s += 1e6;
                }
                else
                {
                    s += 1e-7;
                }
            }
            double trueAnswer = 1e6 + 9999 * 1e-7;

            NUnit.Framework.Assert.IsTrue(System.Math.abs(s - trueAnswer) > 1e-9);
            // precision loss
            com.esri.core.geometry.MathUtils.KahanSummator sum = new com.esri.core.geometry.MathUtils.KahanSummator
                                                                     (0);
            for (int i_1 = 0; i_1 < 10000; i_1++)
            {
                if (i_1 == 0)
                {
                    sum.add(1e6);
                }
                else
                {
                    sum.add(1e-7);
                }
            }
            double kahanResult = sum.getResult();

            // 1000000.0009999000 //C++
            // 1000000.0009999 //Java
            NUnit.Framework.Assert.IsTrue(kahanResult == trueAnswer);
        }