115 / 31 == 3
115 % 31 == 22
(115 + (115%31)/2) / 31
#include <stdio.h>
#define SH_DIV(NOM,DEN,LSH) ( (((NOM) / (DEN)) << (LSH)) \
+ ((((NOM) % (DEN)) << (LSH)) + (DEN) / 2) / (DEN))
#define SH_DIV2(NOM,DEN) ( (NOM) / (DEN) + (((NOM) % (DEN) + (DEN) / 2)) / (DEN) )
int main()
{
printf ("%d\n", SH_DIV(1000, SH_DIV(115,31,8), 8));
printf ("%d\n", SH_DIV2(1000, SH_DIV2(115, 31)));
return (0);
}
$ ./temp
269
250
欢迎光临 曲径通幽论坛 (http://www.groad.net/bbs/) | Powered by Discuz! X3.2 |