You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by Ole Ersoy <ol...@gmail.com> on 2014/10/10 22:24:17 UTC

[Math] AbstractIntegerDistribution.inverseCumulativeDistribution Unexpected Result

Hi,

I ran the following assertions on the dice distribution in the AbstractIntegerDistributionTest:

     	Assert.assertEquals(3, diceDistribution.inverseCumulativeProbability(0.7d/6d));  //Expecting 1
     	Assert.assertEquals(3, diceDistribution.inverseCumulativeProbability(0.8d/6d));  //Expecting 1
     	Assert.assertEquals(3, diceDistribution.inverseCumulativeProbability(0.9d/6d));  //Expecting 1
     	Assert.assertEquals(3, diceDistribution.inverseCumulativeProbability(1d/6d));    //Expecting 2
     	Assert.assertEquals(3, diceDistribution.inverseCumulativeProbability(1.5d/6d));  //Expecting 2
     	Assert.assertEquals(3, diceDistribution.inverseCumulativeProbability(2d/6d));    //Expecting 2
     	
     	Assert.assertEquals(3, diceDistribution.inverseCumulativeProbability(2.9d/6d));  //Expecting 3
     	Assert.assertEquals(3, diceDistribution.inverseCumulativeProbability(3.0d/6d));  //Expecting 4
     	Assert.assertEquals(4, diceDistribution.inverseCumulativeProbability(3.1d/6d));
     	
     	Assert.assertEquals(4, diceDistribution.inverseCumulativeProbability(3.2d/6d));    	
     	Assert.assertEquals(4, diceDistribution.inverseCumulativeProbability(3.5d/6d));

     	Assert.assertEquals(4, diceDistribution.inverseCumulativeProbability(4.0d/6d)); //Expecting 5
     	Assert.assertEquals(4, diceDistribution.inverseCumulativeProbability(5.0d/6d)); //Expecting 5
     	Assert.assertEquals(4, diceDistribution.inverseCumulativeProbability(5.1d/6d)); //Expecting 5
     	Assert.assertEquals(5, diceDistribution.inverseCumulativeProbability(5.5d/6d));
     	Assert.assertEquals(6, diceDistribution.inverseCumulativeProbability(6.0d/6d));

All of them pass.  Thoughts?

Cheers,
- Ole

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
For additional commands, e-mail: dev-help@commons.apache.org


Re: [Math] AbstractIntegerDistribution.inverseCumulativeDistribution Unexpected Result

Posted by Ole Ersoy <ol...@gmail.com>.
> The variance of the DiceDistribution is wrong.
>
> Correct is the following: 2.91 or (70/24).
>
> You can verify the correct results also with a
> UniformIntegerDistribution(1, 6).
>
> Obviously the wrong variance was not noticed as the tests in this class
> do not compute the inverseCumulativeProbability.

I rewrote the tests and now they pass.  Just wanted to share the precision info.  If I make it smaller the tests that use it fail.

     	double precision = 0.000000000000001;
     	Assert.assertEquals(1, diceDistribution.inverseCumulativeProbability(0));
     	Assert.assertEquals(1, diceDistribution.inverseCumulativeProbability((1d-Double.MIN_VALUE)/6d));
     	Assert.assertEquals(2, diceDistribution.inverseCumulativeProbability((1d+precision)/6d));
     	Assert.assertEquals(2, diceDistribution.inverseCumulativeProbability((2d-Double.MIN_VALUE)/6d));
     	Assert.assertEquals(3, diceDistribution.inverseCumulativeProbability((2d+precision)/6d));
     	Assert.assertEquals(3, diceDistribution.inverseCumulativeProbability((3d-Double.MIN_VALUE)/6d));
     	Assert.assertEquals(4, diceDistribution.inverseCumulativeProbability((3d+precision)/6d));
     	Assert.assertEquals(4, diceDistribution.inverseCumulativeProbability((4d-Double.MIN_VALUE)/6d));
     	Assert.assertEquals(5, diceDistribution.inverseCumulativeProbability((4d+precision)/6d));
     	Assert.assertEquals(5, diceDistribution.inverseCumulativeProbability((5d-precision)/6d));//Can't use Double.MIN
     	Assert.assertEquals(6, diceDistribution.inverseCumulativeProbability((5d+precision)/6d));
     	Assert.assertEquals(6, diceDistribution.inverseCumulativeProbability((6d-precision)/6d));//Can't use Double.MIN
     	Assert.assertEquals(6, diceDistribution.inverseCumulativeProbability((6d)/6d));

Cheers,
- Ole

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
For additional commands, e-mail: dev-help@commons.apache.org


Re: [Math] AbstractIntegerDistribution.inverseCumulativeDistribution Unexpected Result

Posted by Ole Ersoy <ol...@gmail.com>.
  
> The variance of the DiceDistribution is wrong.
>
> Correct is the following: 2.91 or (70/24).
>
> You can verify the correct results also with a
> UniformIntegerDistribution(1, 6).
>
> Obviously the wrong variance was not noticed as the tests in this class
> do not compute the inverseCumulativeProbability.

Thanks Thomas!  Do you want me to send a pull request with updates to the test?

Cheers,
- Ole

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
For additional commands, e-mail: dev-help@commons.apache.org


Re: [Math] AbstractIntegerDistribution.inverseCumulativeDistribution Unexpected Result

Posted by Thomas Neidhart <th...@gmail.com>.
On 10/10/2014 10:24 PM, Ole Ersoy wrote:
> Hi,
> 
> I ran the following assertions on the dice distribution in the
> AbstractIntegerDistributionTest:
> 
>         Assert.assertEquals(3,
> diceDistribution.inverseCumulativeProbability(0.7d/6d));  //Expecting 1
>         Assert.assertEquals(3,
> diceDistribution.inverseCumulativeProbability(0.8d/6d));  //Expecting 1
>         Assert.assertEquals(3,
> diceDistribution.inverseCumulativeProbability(0.9d/6d));  //Expecting 1
>         Assert.assertEquals(3,
> diceDistribution.inverseCumulativeProbability(1d/6d));    //Expecting 2
>         Assert.assertEquals(3,
> diceDistribution.inverseCumulativeProbability(1.5d/6d));  //Expecting 2
>         Assert.assertEquals(3,
> diceDistribution.inverseCumulativeProbability(2d/6d));    //Expecting 2
>        
>         Assert.assertEquals(3,
> diceDistribution.inverseCumulativeProbability(2.9d/6d));  //Expecting 3
>         Assert.assertEquals(3,
> diceDistribution.inverseCumulativeProbability(3.0d/6d));  //Expecting 4
>         Assert.assertEquals(4,
> diceDistribution.inverseCumulativeProbability(3.1d/6d));
>        
>         Assert.assertEquals(4,
> diceDistribution.inverseCumulativeProbability(3.2d/6d));       
>         Assert.assertEquals(4,
> diceDistribution.inverseCumulativeProbability(3.5d/6d));
> 
>         Assert.assertEquals(4,
> diceDistribution.inverseCumulativeProbability(4.0d/6d)); //Expecting 5
>         Assert.assertEquals(4,
> diceDistribution.inverseCumulativeProbability(5.0d/6d)); //Expecting 5
>         Assert.assertEquals(4,
> diceDistribution.inverseCumulativeProbability(5.1d/6d)); //Expecting 5
>         Assert.assertEquals(5,
> diceDistribution.inverseCumulativeProbability(5.5d/6d));
>         Assert.assertEquals(6,
> diceDistribution.inverseCumulativeProbability(6.0d/6d));
> 
> All of them pass.  Thoughts?

The variance of the DiceDistribution is wrong.

Correct is the following: 2.91 or (70/24).

You can verify the correct results also with a
UniformIntegerDistribution(1, 6).

Obviously the wrong variance was not noticed as the tests in this class
do not compute the inverseCumulativeProbability.

Thomas

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
For additional commands, e-mail: dev-help@commons.apache.org