取模运算没什么精度的问题,只有对或不对Math.Pow进行的浮点数运算,区模进行的是整数运算 Pow的结果会被转换为int,问题是早就溢出了。所以你的结果肯定不对如果你真有这种需求,可以自己写个这样的函数进行精确计算[code=C#] public int ModAfterPow(int b, int e, int m) { int t = 1; for (int i = 0; i < e; i++) { t = t * b; t = t % m; } return t; } public override void Run() { Console.WriteLine(ModAfterPow(34, 103, 143)); } [code]
答案是122。
两种运算,只是精度有别,最终结果都是错误的。
Pow的结果会被转换为int,问题是早就溢出了。所以你的结果肯定不对如果你真有这种需求,可以自己写个这样的函数进行精确计算[code=C#] public int ModAfterPow(int b, int e, int m)
{
int t = 1;
for (int i = 0; i < e; i++) {
t = t * b;
t = t % m;
} return t;
} public override void Run()
{
Console.WriteLine(ModAfterPow(34, 103, 143));
}
[code]
但.Net的取模并不是只针对整数的,浮点数一样可以取模并获得正确的结果。所以Math.Pow(34,103) % 143是会将143转为double进行运算而不是你说的将pow结果转换为int。
嗯,结果我贴错了,122就是正确结果,精度之间确实存在问题,double的精度不够,舍去了太多的精度。
而取模是整数运算不会有半点的误差。你觉得对一个有亿亿亿亿亿亿误差的数取模会有任何意义吗?