bcsqrt
bcsqrt($num, $scale)
Zwraca pierwiastek kwadratowy liczby jako ciąg znaków z podaną liczbą miejsc po przecinku. Daje znacznie więcej miejsc po przecinku niż sqrt(). Należy do rozszerzenia BCMath.
Parametry
- $num – nieujemna liczba jako ciąg znaków.
- $scale – opcjonalny, liczba miejsc po przecinku w wyniku. Domyślnie wartość z bcscale(), zwykle 0.
Przykłady
echo bcsqrt("16"); // 4
echo bcsqrt("2", 10); // 1.4142135623
// bez drugiego parametru tylko część całkowita
echo bcsqrt("10"); // 3
echo bcsqrt("0.25", 2); // 0.50
// pięćdziesiąt miejsc po przecinku
echo strlen(bcsqrt("2", 50)); // 52
// sqrt zachowuje tylko około 15 cyfr znaczących
echo sqrt(2); // 1.4142135623731
// sprawdzenie: kwadrat wyniku mieści się poniżej pierwotnej liczby
$root = bcsqrt("2", 10);
echo bcmul($root, $root, 10); // 1.9999999997
Na co uważać
- Liczba ujemna wypisuje w PHP 7 ostrzeżenie i zwraca null, od PHP 8.0 rzuca wyjątek ValueError.
- Miejsca po przecinku ponad podaną liczbę są obcinane, więc wynik jest zawsze trochę mniejszy niż dokładny pierwiastek.
- Bez drugiego parametru liczy z liczbą miejsc z bcscale(), zwykle 0.
- Do zwykłych obliczeń wystarczy szybsza sqrt().
- BCMath to rozszerzenie PHP i nie musi być włączone na serwerze. Sprawdzisz to przez function_exists("bcadd").