CGVictor,
Orme [OFF]Эксперимент показал, что максимальная степень по базе \'2\' - это 39 (pow(2,39))
pow(2,39) = 549 755 813 888
pow(2,40) = 1.099 511 627 78E+012
Дальше идёт округление
Функци bcpow() действительно не считает дробные степени.[/OFF]
Пусть m - степень (дробная). например, 25,86
Тогда m1 = floor(m); // целая часть 25
m2 = m - m1; // дробная часть 0,86
Теперь, согласно форумуле
bcpow(a, m) = bcpow(a, m1) * pow(a, m2);
Готовая функция может выглядеть так:
function mypow($x, $y, $scale = 0){
if (is_float($y)){
$y1 = floor($y);
$y2 = $y - $y1;
return bcmul(bcpow($x, $y1), pow($x, $y2), $scale);
} else {
return bcpow($x, $y);
}
}