public function testAt() { // Verified with WolframAlpha // (e.g. http://www.wolframalpha.com/input/?i=PDF%5BNormalDistribution%5B0%2C1%5D%2C+0.5%5D ) $this->assertEquals(0.352065, GaussianDistribution::at(0.5), '', GaussianDistributionTest::ERROR_TOLERANCE); }
public static function wWithinMargin($teamPerformanceDifference, $drawMargin) { $teamPerformanceDifferenceAbsoluteValue = abs($teamPerformanceDifference); $denominator = GaussianDistribution::cumulativeTo($drawMargin - $teamPerformanceDifferenceAbsoluteValue) - GaussianDistribution::cumulativeTo(-$drawMargin - $teamPerformanceDifferenceAbsoluteValue); if ($denominator < 2.222758749E-162) { return 1.0; } $vt = self::vWithinMargin($teamPerformanceDifferenceAbsoluteValue, $drawMargin); return $vt * $vt + (($drawMargin - $teamPerformanceDifferenceAbsoluteValue) * GaussianDistribution::at($drawMargin - $teamPerformanceDifferenceAbsoluteValue) - (-$drawMargin - $teamPerformanceDifferenceAbsoluteValue) * GaussianDistribution::at(-$drawMargin - $teamPerformanceDifferenceAbsoluteValue)) / $denominator; }