How does this work?
llui mul_mod(llui a, llui b, llui m){ llui y = (llui)((float64)a*(float64)b/m+(float64)1/2); y = y * m; llui x = a * b; llui r = x — y; if ( (lli)r < 0 ){ r = r + m; y = y — 1; } return r; }
For example if we do c = (a+b)%m;
What if a+b itself causes the overflow that is a+b is larger than the size of typeof a or b.
Doesn’t x in the above image cause overflow that is a*b is larger than a size of llui.
Here llui means long long unsigned int and lli means long long int and float64 stands for long double