This extension is an interface to the GNU implementation as a library of the Basic Calculator utility by Philip Nelson; hence the name.
Keyfi duyarlıklı matematik işlemleri için PHP, herhangi bir boyut ve
duyarlıktaki sayıları 2147483647'ye kadar
(veya 0x7FFFFFFF) destekleyen BCMath işlevlerini kullanır.
Yeterli bellek yoksa, sayılar dizge olarak gösterilir.
Geçerli (yani, iyi biçimli) BCMath sayıları
/^[+-]?[0-9]*(\.[0-9]*)?$/ düzenli ifadesi ile eşleşen
dizgelerdir.
string türünde bir terim bekleyen bir BCMath işlevine float türünde değer aktarılması, PHP'nin float değerleri string türüne dönüştürme yolundan dolayı istenen etkiyi sağlamayabilir (string üstel gösterim içerebilir ama üstel gösterim BCMath tarafından desteklenmez, ayrıca PHP 8.0.0 öncesinde ondalık ayracı yerele bağımlıdır ama BCMath burada ondalık nokta bekler).
<?php
$num1 = 0; // (string) 0 => '0'
$num2 = -0.000005; // (string) -0.000005 => '-5.05E-6'
echo bcadd($num1, $num2, 6); // => '0.000000'
setlocale(LC_NUMERIC, 'de_DE'); // ondalık ayraç virgüldür
$num2 = 1.2; // (string) 1.2 => '1,2'
echo bcsub($num1, $num2, 1); // => '0.0'
?>This extension is an interface to the GNU implementation as a library of the Basic Calculator utility by Philip Nelson; hence the name.Note that when you use implementation of factorial that ClaudiuS made, you get results even if you try to calculate factorial of number that you normally can't, e.g. 2.5, -2, etc. Here is safer implementation:
<?php
/**
* Calculates a factorial of given number.
* @param string|int $num
* @throws InvalidArgumentException
* @return string
*/
function bcfact($num)
{
if (!filter_var($num, FILTER_VALIDATE_INT) || $num <= 0) {
throw new InvalidArgumentException(sprintf('Argument must be natural number, "%s" given.', $num));
}
for ($result = '1'; $num > 0; $num--) {
$result = bcmul($result, $num);
}
return $result;
}
?>Needed to compute some permutations and found the BC extension great but poor on functions, so untill this gets implemented here's the factorial function:
<?php
/* BC FACTORIAL
* n! = n * (n-1) * (n-2) .. 1 [eg. 5! = 5 * 4 * 3 * 2 * 1 = 120]
*/
function bcfact($n){
$factorial=$n;
while (--$n>1) $factorial=bcmul($factorial,$n);
return $factorial;
}
print bcfact(50);
//30414093201713378043612608166064768844377641568960512000000000000
?>