code: public static function HYPGEOMDIST($sampleSuccesses, $sampleNumber, $populationSuccesses, $populationNumber)
      {
          $sampleSuccesses = floor(Functions::flattenSingleValue($sampleSuccesses));
          $sampleNumber = floor(Functions::flattenSingleValue($sampleNumber));
          $populationSuccesses = floor(Functions::flattenSingleValue($populationSuccesses));
          $populationNumber = floor(Functions::flattenSingleValue($populationNumber));
  
          if ((is_numeric($sampleSuccesses)) && (is_numeric($sampleNumber)) && (is_numeric($populationSuccesses)) && (is_numeric($populationNumber))) {
              if (($sampleSuccesses < 0) || ($sampleSuccesses > $sampleNumber) || ($sampleSuccesses > $populationSuccesses)) {
                  return Functions::NAN();
              }
              if (($sampleNumber <= 0) || ($sampleNumber > $populationNumber)) {
                  return Functions::NAN();
              }
              if (($populationSuccesses <= 0) || ($populationSuccesses > $populationNumber)) {
                  return Functions::NAN();
              }
  
              return MathTrig::COMBIN($populationSuccesses, $sampleSuccesses) *
                     MathTrig::COMBIN($populationNumber - $populationSuccesses, $sampleNumber - $sampleSuccesses) /
                     MathTrig::COMBIN($populationNumber, $sampleNumber);
          }
  
          return Functions::VALUE();
      }
docs: HYPGEOMDIST.
  
  Returns the hypergeometric distribution. HYPGEOMDIST returns the probability of a given number of
  sample successes, given the sample size, population successes, and population size.
  
  @param float $sampleSuccesses Number of successes in the sample
  @param float $sampleNumber Size of the sample
  @param float $populationSuccesses Number of successes in the population
  @param float $populationNumber Population size
  
  @return float