首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >php中的幂函数计算17^2147482999

php中的幂函数计算17^2147482999
EN

Stack Overflow用户
提问于 2011-06-08 05:35:30
回答 6查看 4.7K关注 0票数 3

我试图建立一个幂函数来计算17^2147482999的幂。我试过这个代码:

代码语言:javascript
运行
复制
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; 
} 

函数调用:

代码语言:javascript
运行
复制
echo ipow($a, $b);

错误:

代码语言:javascript
运行
复制
Fatal error: Maximum function nesting level of '100' reached, aborting! in C:\wamp\www\spoj\LASTDIG.php on line 23

还有其他方法来计算这么大的数值的幂吗?内置的pow()函数提供了一个INF输出。

更新

如果似乎不可能得到整个答案,那么是否有可能通过某种数学方法至少提取出答案的最后5-10位数字呢?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-06-08 06:04:23

您可以像这样使用bcpowmod函数:

代码语言:javascript
运行
复制
<?php echo bcpowmod(17,2147482999,10000000000); ?>

结果是8849802353,即17^2147482999 mod 10000000000或,17^2147482999的最后10位数是8849802353。

票数 3
EN

Stack Overflow用户

发布于 2011-06-08 05:39:17

您不能用普通的PHP经验性操作来实现这一点。这超出了整数的范围,甚至在64位系统上也是如此。

您需要使用bcmath扩展和bcpow函数。(如果这不起作用的话,甚至连gmp都不行。)

代码语言:javascript
运行
复制
 print bcpow(17, 2147482999);
票数 4
EN

Stack Overflow用户

发布于 2011-06-08 05:45:21

其结果值按1e+2642368139的顺序排列,比大多数库中的值要大得多。如果您需要一些近似,可以使用一些对数逻辑:

代码语言:javascript
运行
复制
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
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6274606

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档