mpdigdiv.c

来自「这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易」· C语言 代码 · 共 44 行

C
44
字号
#include "os.h"#include <mp.h>#include "dat.h"////	divide two digits by one and return quotient//voidmpdigdiv(mpdigit *dividend, mpdigit divisor, mpdigit *quotient){	mpdigit hi, lo, q, x, y;	int i;	hi = dividend[1];	lo = dividend[0];	// return highest digit value if the result >= 2**32	if(hi >= divisor || divisor == 0){		divisor = 0;		*quotient = ~divisor;		return;	}	// at this point we know that hi < divisor	// just shift and subtract till we're done	q = 0;	x = divisor;	for(i = Dbits-1; hi > 0 && i >= 0; i--){		x >>= 1;		if(x > hi)			continue;		y = divisor<<i;		if(x == hi && y > lo)			continue;		if(y > lo)			hi--;		lo -= y;		hi -= x;		q |= 1<<i;	}	q += lo/divisor;	*quotient = q;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?