gpt4 book ai didi

c++ - 使用 fmod 和自己的实现的库 math.h

转载 作者:搜寻专家 更新时间:2023-10-31 01:44:11 28 4
gpt4 key购买 nike

//test.cpp
fmod( pow(2.0,127),467 );// Return result as 132 <-- correct answer

当我使用自己的实现时

int mod( int dividend , int divisor ){
return (dividend % divisor + divisor ) % divisor;
}

int a = mod ( pow(2.0,127),467 );// Wrong result , 441

//or direct use
int a = pow(2.0,127);
int b = a%467 // Will return wrong result , -21

我想得到答案 132,fmod 做到了,但为什么我的实现无法得到正确答案?

最佳答案

正如 Ivan 所指出的那样,问题是您超出了整数的范围。不幸的是,没有可以容纳 2^127 的 native 类型(不包括使用两个 64 位结果作为合成 128 位 int)。

然而,幸运的是,在这种情况下,您更可能需要的是 powmod。 Powmod 是一个 pow 函数,它在计算 mod 的同时计算幂(顾名思义)。像这样的事情应该对你有用:

int powmod(int b, int e, int m)
{
int result = 1;
while(e > 0){
if(e & 1){
result *= b;
result %= m;
}
b *= b;
b %= m;
e >>= 1;
}
return result;
}

在这种情况下,b 是底数,e 是指数,m 是模数。所以在这种情况下,powmod(2, 127, 467) 返回 132 —— 您想要的答案。希望这会有所帮助,如果您正在处理大量大数和模运算,我建议您阅读一两篇关于模运算一致性的文章。

编辑:修正了一个语法错误。

关于c++ - 使用 fmod 和自己的实现的库 math.h,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23883926/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com