bcpow

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

bcpowEleva um número de precisão arbitrária a outro

Descrição

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

Eleva num a potência de exponent.

Parâmetros

num

O número base, como uma string.

exponent

O número expoente, como uma string. Se o expoente for não inteiro, ele será truncado. Os expoentes válidos dependem da plataforma, mas ao menos são válidos de -2147483648 até 2147483647.

scale

Este parâmetro opcional é usado para definir o número de dígitos após a casa decimal do resultado. Se omitido, o padrão será a escala definida globalmente com a função bcscale() ou, em último caso, 0 se a escala não tiver sido definida.

Valor Retornado

Retorna o resultado como uma string.

Registro de Alterações

Versão Descrição
7.3.0 bcpow() agora retorna números com a escala solicitada. Mais exatamente, o número retornado pode omitir alguns zeros decimais.

Exemplos

Exemplo #1 Exemplo da bcpow()

<?php

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

?>

Notas

Nota:

Anteriormente ao PHP 7.3.0, bcpow() podia retornar um resultado com menos dígitos decimais do que o indicado no parâmetro scale. Isto ocorre quando o resultado não requer toda a precisão permitida por scale. Por exemplo:

Exemplo #2 Exemplo bcpow() com scale

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

Veja Também

  • bcpowmod() - Eleva um número de precisão arbitrária para outro, reduzido por um módulo especificado
  • bcsqrt() - Obtém a raiz quadrada de um número de precisão arbitrária

add a note add a note

User Contributed Notes 3 notes

up
-2
thomas at tgohome dot com
14 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
-2
Anonymous
19 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.
up
-2
Michael Bailey (jinxidoru at byu dot net)
19 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
To Top