// > If the `N` value is greater than `D`, we can set this bit
#define DEF_DIVMOD(s) Uint##s __divmod##s(Uint##s N, Uint##s D, Uint##s*Rem){\
Uint##s ret=0,add=1;\
- while(N>=D&&add) {D<<=1;add<<=1;}\
- while(add>1){\
- add>>=1;D>>=1;\
+ while(N/2>=D&&add) {D<<=1;add<<=1;}\
+ while(add>0){\
if(N>=D){ret+=add;N-=D;}\
+ add>>=1;D>>=1;\
}\
if(Rem)*Rem = N;\
return ret;\