public static function random($min = 0.0, $max = 1.0, $round = null, $seed = null)
    {
        if (!static::is($min) || !static::is($max)) {
            throw new \InvalidArgumentException("The \$min and \$max parameters must be of type float.");
        }

        if ($min > $max) {
            trigger_error("The \$min value cannot be greater than the \$max value.", E_USER_WARNING);

            return false;
        }

        // If a seed was given use that seed
        !is_null($seed) && Int::is($seed) && mt_srand($seed);

        // Ensure that max is not inclusive
        $rand = $min + (((mt_rand() - 1) / mt_getrandmax()) * abs($max - $min));

        // Round if needed
        (!is_null($round) && Int::is($round) && $round > 0) && ($rand = round($rand, $round));

        // unseed (random reseed) random generator
        mt_srand();

        return $rand;
    }