# Thread: mod arithmetic in C++

1. ## mod arithmetic in C++

hi,

i have been trying to get some mod arithmetic done in C++ but i am having some problems. It gives me a different asnwer ( the wrong one)...i believe its the size of the var. but i could be wrong.

result = powl(m,e);
c = fmodl(result,n);
results = powl(c,d);
mm = fmodl(results,n);

for c, getting the result of 3^13 mod 77 is not a problem (its 38). But for mm, which is BTW 38^37 mod 77, i get 0 or 8 instead of 3 (3 is the right answer).

FYI: results, result and mm are long double; while c,d,e and n are integers.
ideas anyone?

2. For integer modulus use the % operator or for powers of 2 use the & operator with (n-1).

So for 5000 mod 4096 you could do:

int num=5000%4096;

or

int num=5000 & 0x0FFF;

The & operation is quicker but only works on powers of 2.

3. Are you sure the correct answer is 3? What did you use to calculate (38^37) % 77?
Here is some code and answers I got.
Code:
```int main()
{
double dn1 = 38, dn2 = 37, dmod = 77 , dresult,dtemp;
long double ldn1 = 38, ldn2 = 37, ldmod = 77, ldresult,ldtemp;

cout << "Using doubles " << endl;

dtemp = powl(dn1,dn2);
dresult = fmodl(dtemp,dmod);

cout << dresult << endl;

cout << "Using long doubles " << endl;

ldtemp = powl(ldn1,ldn2);
ldresult = fmodl(ldtemp,ldmod);

cout << ldresult << endl;

return 0;
}```
And here is the output i got
Using doubles
30
Using long doubles
8

so there is a problem here. Either the doubles are over flowing, or using long doubles results in wrong answers.
Using limits.h and DBL_MAX on my system doubles max out at 1.79769e+308. So i think its just an error due to trying to use long doubles.