Power function in php to calculate 17^2147482999

浪尽此生 提交于 2019-12-22 09:40:03

问题


I am trying to make a power function to calculate the power of 17^2147482999. I tried this code:

function ipow($a, $b) { 
    if ($b<0) { 
        echo "B must be a positive integer";
    } 
    if ($b==0) return 1; 
    if ($a==0) return 0; 
    if ($b%2==0) { 
        return ipow($a*$a, $b/2); 
    } else if ($b%2==1) { 
        return $a*ipow($a*$a,$b/2); 
    } 
    return 0; 
} 

The function call:

echo ipow($a, $b);

The error:

Fatal error: Maximum function nesting level of '100' reached, aborting! in C:\wamp\www\spoj\LASTDIG.php on line 23

Is there any other way to calculate the power for such big values? The inbuilt pow() function is giving an INF output.

UPDATE

If it seems impossible to get the whole answer, is it possible to extract atleast the last 5-10 digits of the answer by some mathematical approach?


回答1:


You may use bcpowmod function like this:

<?php echo bcpowmod(17,2147482999,10000000000); ?>

the result is 8849802353 which means, 17^2147482999 mod 10000000000 or, the last 10 digits of 17^2147482999 is 8849802353.




回答2:


You cannot do that with plain PHP arithemtic operations. That's way out of range for integers, even on 64-bit systems.

You need to use the bcmath extension and the bcpow function. (If that doesn't work maybe even gmp.)

 print bcpow(17, 2147482999);



回答3:


The resulting value is something in the order of 1e+2642368139, a lot more than can fit in most libraries. If you want some approximation, you can use some logarithmic logic:

17^2147482999 = 10^(log(17^2147482999))
    = 10^(2147482999 * log(17))
    = 10^(2147482999 * 1.23045)
    = 10^(2642368139.79773)
    = 10^2642368139 * 10^0.79773
    = 6.27669e+2642368139



回答4:


GNU Multiple Precision and namely gmp_pow may be what you are looking for.




回答5:


I suggest you look into BigInteger, the constant PHP_INT_MAX will tell you how big an integer your platform can handle. On 64 bit this returns 9223372036854775807, wich is far from for your result in decimal notation.




回答6:


Try to change the algorithm and instead of working with numbers (as the data type) ... work with plain strings. It will take a lot of time to compute it but it will be achievable :)



来源:https://stackoverflow.com/questions/6274606/power-function-in-php-to-calculate-172147482999

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!