C#求余问题
最近在研究编码转换,用到求余运算,发现一个有意思的bug,用C#自带的求余运算和微软自带的计算机求余运算的结果竟然不同,例如:
C#运算Math.Pow(34,103) % 143 =75
计算机运算(34^103)mod 143 =120
哪位大神知道两种运算方式的差别在哪?
------解决方案--------------------
取模运算没什么精度的问题,只有对或不对
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]