首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C#,Modulo运算给出了与计算器不同的结果

C#,Modulo运算给出了与计算器不同的结果
EN

Stack Overflow用户
提问于 2018-03-23 18:21:05
回答 2查看 217关注 0票数 1

所以我想写一个方法: 142^23 (mod 187),使用任何计算器我得到结果65,但是用这段代码:double number = Math.Pow(142, 23) % 187我得到了53的结果。为什么,我在这里做错什么了?

EN

Stack Overflow用户

回答已采纳

发布于 2018-03-23 18:29:03

Math.Pow(142, 23)太大了,无法精确地用双人表示。所以你的模数是在有耗的计算上做的。

这将给出正确的答案:

代码语言:javascript
运行
复制
BigInteger.ModPow(142, 23, 187);

BigInteger可以在System.Numerics命名空间和程序集中找到。

如果您想要的话,您也可以自己高效地实现这一点,对于您在问题中使用的大小的整数来说。

代码语言:javascript
运行
复制
private static int ModPow(int basenum, int exponent, int modulus)
{
    if (modulus == 1)
    {
        return 0;
    }
    int result = 1;
    for (var i = 0; i < exponent; i++)
    {
        result = (result * basenum) % modulus;
    }
    return result;
}

BigInteger用二进制指数做了一些更聪明的事情,这将对真正庞大的数字更好地工作。

票数 11
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49456119

复制
相关文章

相似问题

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