Javascript自制的带模pow

Javascript自制的带模pow,javascript,algorithm,pow,Javascript,Algorithm,Pow,我用JavaScript编写了这段代码,但对于较大的输入,它返回了错误的数字。 它应该用模(mo)计算指数(ex)幂的基数 我用C写了相当的代码,现在正在工作。有人能告诉我怎么了吗 试着检验模10^9+7的费马定理 function powFun(base, ex, mo) { var r; if(ex === 0) return 1; else if(ex % 2 === 0) { r = powFun(base, ex/2, mo)

我用JavaScript编写了这段代码,但对于较大的输入,它返回了错误的数字。
它应该用模(mo)计算指数(ex)幂的基数
我用C写了相当的代码,现在正在工作。有人能告诉我怎么了吗
试着检验模10^9+7的费马定理

function powFun(base, ex, mo) {
    var r;
    if(ex === 0) 
        return 1;
    else if(ex % 2 === 0) {
        r = powFun(base, ex/2, mo) % mo ;
        return (r * r) % mo;
    }else 
        return (base * powFun(base, ex - 1, mo)) % mo;
}

溢出发生在此行中:

return (r * r) % mo;
有关要实现的一些简单算法,请参阅的答案。我已经适应了下面的Javascript:

函数addmod(x,y,n) {
//先决条件:请添加一些测试数据。在什么输入上失败,预期输出是什么?数字有多大?请参阅,以获取在JS中可以准确表示的最大整数。输入值为,base=4,ex=1000000006,mo=1000000007。请阅读@Barmar链接的页面-Javascript只能处理最多53位的整数在大小上。要正确计算模块积,您可以使用的最大模数是2^(53/2)=94906265。这比10^9+7小得多。因此您必须找到支持大整数的Javascript库,或者编写自己的例程。@squemishosifrage:这不是(2^53)/2?(或2^(53-1))回答得很好,但是您可能应该将
addmod()
的第一行更改为
if(x+y