Программирование > PHP

pow() и bcpow() не катят

<< < (2/3) > >>

Orme:
andymc

--- Цитировать ---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);
    }
}
--- Конец цитаты ---


Не будет работать. Нужна формула (ln(a) * a^X)*x + a^X.
В ней тоже много проблем, которые стандартными способами не решишь.

andymc:
Я сам проверял, работает нормально
--- Цитировать ---bcpow(a, m) = bcpow(a, m1) * pow(a, m2)
--- Конец цитаты ---
это формула школьного курса, переделанная под php (\'a\' в степени \'c\'+\'b\' = \'a\' в степени \'c\' умножить на \'a\' в степени \'b\')
Логически елси подумать, это должно работать

Orme:
m2 - все равно дробь. Смысл какой?

Нужно привести в итоге к целочисленным вычислениям.

Тут надо переводить decimal в fraction (типа 1/2, 5/4)

Далее по формуле a^m/n = n-ный корень из a^m

andymc:
m2 - дробь, но pow() же работает с дробями. Смысл в том, чтобы разделить задачу на 2 части: отдельно считать целое и дробное.

--- Цитировать ---переводить decimal в fraction (типа 1/2, 5/4)
--- Конец цитаты ---
что-то мне кажется, что это невозможно
--- Цитировать ---a^m/n = n-ный корень из a^m
--- Конец цитаты ---
я сначала тоже так думал, только вот n-ный корень ты не сможешь точно подсчитать:
pow() ограничена
bcpow() не работает с дробями

ты функцию проверял? Она работает?

Orme:

--- Цитировать --- что-то мне кажется, что это невозможно
--- Конец цитаты ---


- очень даже несложная функция:


function dec2frac($decimal) {

$decimal = (string)$decimal;
$num = "";
$den = "1";
$dec = false;

for ($i = 0, $len = strlen($decimal); $i < $len; $i++) {
if ($dec) $den = gmp_mul($den, "10");
if ($decimal{$i} == ".") {
$dec = true;
}else{
$num .= $decimal{$i};
}
}

if($den == "1") return $num;

if (strpos($num, "0") === 0) $num = ltrim($num, "0");

$gcd = gmp_gcd($num, $den);

$num = gmp_strval(gmp_div($num, $gcd));
$den = gmp_strval(gmp_div($den, $gcd));

return $num."/".$den;

}

Навигация

[0] Главная страница сообщений

[#] Следующая страница

[*] Предыдущая страница

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 
Перейти к полной версии