bcpow

(PHP 4, PHP 5, PHP 7, PHP 8)

bcpowElevar un número de precisión arbitraria a otro

Descripción

bcpow(string $num, string $exponent, ?int $scale = null): string

Eleva num a la potencia exponent.

Parámetros

num

La base, como un string.

exponent

El exponente, como un string. Debe ser un valor sin parte fraccionaria. El rango válido del exponente es específico de la plataforma, pero es al menos de -2147483648 a 2147483647.

scale
Este parámetro se utiliza para establecer el número de dígitos después del punto decimal en el resultado. Si es null, se establecerá por defecto en la escala predeterminada establecida con bcscale(), o se utilizará el valor de la directiva INI bcmath.scale.

Valores devueltos

Devuelve el resultado como un string.

Errores/Excepciones

Esta función lanza una ValueError en los siguientes casos:

  • num o exponent no es un string numérico con formato válido de BCMath
  • exponent tiene una parte fraccionaria
  • exponent o scale están fuera del rango válido

Esta función lanza una DivisionByZeroError si num es 0 y exponent es un valor negativo.

Historial de cambios

Versión Descripción
8.4.0 Las potencias negativas de 0 anteriormente devolvían 0, pero ahora lanzan una excepción DivisionByZeroError.
8.0.0 Cuando exponent tiene una parte fraccionaria, ahora lanza un ValueError en lugar de truncar.
7.3.0 bcpow() ahora devuelve números con la escala solicitada. Anteriormente, los números devueltos podían omitir los ceros decimales finales.

Ejemplos

Ejemplo #1 Ejemplo de bcpow()

<?php

echo bcpow('4.2', '3', 2); // 74.08

?>

Notas

Nota:

Antes de PHP 7.3.0, bcpow() podría devolver un resultado con menos dígitos después del punto decimal que los indicados en el parámetro scale. Esto sucede únicamente cuando el resultado no necesita toda la precisión disponible por scale. Por ejemplo:

Ejemplo #2 Ejemplo de escalado de bcpow()

<?php
echo bcpow('5', '2', 2); // Imprime "25", no "25.00"
?>

Ver también

  • bcpowmod() - Eleva un número de precisión arbitraria a otro, reducido por un módulo especificado
  • bcsqrt() - Obtiene la raiz cuadrada de un número de precisión arbitraria
  • BcMath\Number::pow()

add a note

User Contributed Notes 3 notes

up
-1
Michael Bailey (jinxidoru at byu dot net)
20 years ago
bcpow() only supports exponents less than or equal to 2^31-1. Also, bcpow() does not support decimal numbers. If you have scale set to 0, then the exponent is converted to an interger; otherwise an error is generated.

--
Michael Bailey
http://www.jinxidoru.com
up
-2
thomas at tgohome dot com
15 years ago
<?php

bcscale
(100);

/*
* Computes the natural logarithm using a series.
* @author Thomas Oldbury.
* @license Public domain.
*/
function bcln($a, $iter = 10)
{
$result = "0.0";

for(
$i = 0; $i < $iter; $i++)
{
$pow = (1 + (2 * $i));
$mul = bcdiv("1.0", $pow);
$fraction = bcmul($mul, bcpow(bcsub($a, "1.0") / bcadd($a, "1.0"), $pow));
$result = bcadd($fraction, $result);
}

return
bcmul("2.0", $result);
}

/*
* Computes the base2 log using baseN log.
* @note Requires above functions.
* @author Thomas Oldbury.
* @license Public domain.
*/
function bclog2($a, $iter = 10)
{
return
bcdiv(bcln($a, $iter), bcln("2", $iter));
}

/*
* Computes the base10 log using baseN log.
* @note Requires above functions.
* @author Thomas Oldbury.
* @license Public domain.
*/
function bclog10($a, $iter = 10)
{
return
bcdiv(bcln($a, $iter), bcln("10", $iter));
}


?>
up
-3
Anonymous
20 years ago
Well, if bcpow has limits, then this should work:
<?php
function bcpow_($num, $power) {
$awnser = "1";
while (
$power) {
$awnser = bcmul($awnser, $num, 100);
$power = bcsub($power, "1");
}
return
rtrim($awnser, '0.');
}
?>
Just that $power cannot have decimal digits in it.
To Top