![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/mautic.corals.io/vendor/bjeavons/zxcvbn-php/src/Math/ |
<?php declare(strict_types=1); namespace ZxcvbnPhp\Math; use ZxcvbnPhp\Math\Impl\BinomialProviderPhp73Gmp; use ZxcvbnPhp\Math\Impl\BinomialProviderFloat64; use ZxcvbnPhp\Math\Impl\BinomialProviderInt64; class Binomial { private static $provider = null; private function __construct() { throw new \LogicException(__CLASS__ . " is static"); } /** * Calculate binomial coefficient (n choose k). * * @param int $n * @param int $k * @return float */ public static function binom(int $n, int $k): float { return self::getProvider()->binom($n, $k); } public static function getProvider(): BinomialProvider { if (self::$provider === null) { self::$provider = self::initProvider(); } return self::$provider; } /** * @return string[] */ public static function getUsableProviderClasses(): array { // In order of priority. The first provider with a value of true will be used. $possibleProviderClasses = [ BinomialProviderPhp73Gmp::class => function_exists('gmp_binomial'), BinomialProviderInt64::class => PHP_INT_SIZE >= 8, BinomialProviderFloat64::class => PHP_FLOAT_DIG >= 15, ]; $possibleProviderClasses = array_filter($possibleProviderClasses); return array_keys($possibleProviderClasses); } private static function initProvider(): BinomialProvider { $providerClasses = self::getUsableProviderClasses(); if (!$providerClasses) { throw new \LogicException("No valid providers"); } $bestProviderClass = reset($providerClasses); return new $bestProviderClass(); } }