📄 divide.c
字号:
#include <stdint.h>#include <signal.h>#if BITS == 64typedef uint64_t unum;typedef int64_t snum;#elsetypedef uint32_t unum;typedef int32_t snum;#endif#ifdef SIGNEDtypedef snum xnum;#elsetypedef unum xnum;#endif#ifdef __cris__static inline unum __attribute__ ((const))dstep(unum rs, unum rd){ asm("dstep %1,%0": "+r"(rd):"r"(rs)); return rd;}static inline unum __attribute__ ((const))lz(unum rs){ unum rd; asm("lz %1,%0": "=r"(rd):"r"(rs)); return rd;}#else/* For testing */static inline unum __attribute__ ((const))dstep(unum rs, unum rd){ rd <<= 1; if (rd >= rs) rd -= rs; return rd;}static inline unum __attribute__ ((const))lz(unum rs){ unum rd = 0; while (rs >= 0x7fffffff) { rd++; rs <<= 1; } return rd;}#endifxnum NAME(unum num, unum den){ unum quot = 0, qbit = 1; int minus = 0; xnum v; if (den == 0) { raise(SIGFPE); return 0; /* If signal ignored... */ } if (den == 1) return (xnum) (REM ? 0 : num);#if SIGNED if ((snum) (num ^ den) < 0) minus = 1; if ((snum) num < 0) num = -num; if ((snum) den < 0) den = -den;#endif den--; /* Left-justify denominator and count shift */ while ((snum) den >= 0) { den <<= 1; qbit <<= 1; } while (qbit) { if (den <= num) { num -= den; quot += qbit; } den >>= 1; qbit >>= 1; } v = (xnum) (REM ? num : quot); if (minus) v = -v; return v;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -