Esempio n. 1
0
 /**
  *	NEGBINOMDIST
  *
  *	Returns the negative binomial distribution. NEGBINOMDIST returns the probability that
  *	there will be number_f failures before the number_s-th success, when the constant
  *	probability of a success is probability_s. This function is similar to the binomial
  *	distribution, except that the number of successes is fixed, and the number of trials is
  *	variable. Like the binomial, trials are assumed to be independent.
  *
  *	@param	float		$failures		Number of Failures
  *	@param	float		$successes		Threshold number of Successes
  *	@param	float		$probability	Probability of success on each trial
  *	@return	float
  *
  */
 public static function NEGBINOMDIST($failures, $successes, $probability)
 {
     $failures = floor(PHPExcel_Calculation_Functions::flattenSingleValue($failures));
     $successes = floor(PHPExcel_Calculation_Functions::flattenSingleValue($successes));
     $probability = PHPExcel_Calculation_Functions::flattenSingleValue($probability);
     if (is_numeric($failures) && is_numeric($successes) && is_numeric($probability)) {
         if ($failures < 0 || $successes < 1) {
             return PHPExcel_Calculation_Functions::NaN();
         }
         if ($probability < 0 || $probability > 1) {
             return PHPExcel_Calculation_Functions::NaN();
         }
         if (PHPExcel_Calculation_Functions::getCompatibilityMode() == PHPExcel_Calculation_Functions::COMPATIBILITY_GNUMERIC) {
             if ($failures + $successes - 1 <= 0) {
                 return PHPExcel_Calculation_Functions::NaN();
             }
         }
         return PHPExcel_Calculation_MathTrig::COMBIN($failures + $successes - 1, $successes - 1) * pow($probability, $successes) * pow(1 - $probability, $failures);
     }
     return PHPExcel_Calculation_Functions::VALUE();
 }