⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mult.c

📁 unix v7是最后一个广泛发布的研究型UNIX版本
💻 C
字号:
#include <mp.h>mult(a,b,c) struct mint *a,*b,*c;{	struct mint x,y,z;	int sign;	sign = 1;	x.val=a->val;	y.val=b->val;	z.len=0;	if(a->len<0)	{	x.len= -a->len;		sign= -sign;	}	else	x.len=a->len;	if(b->len<0)	{	y.len= -b->len;		sign= -sign;	}	else	y.len=b->len;	if(x.len<y.len) m_mult(&y,&x,&z);	else m_mult(&x,&y,&z);	xfree(c);	if(sign<0) c->len= -z.len;	else c->len=z.len;	if(c->len==0) shfree(z.val);	else c->val=z.val;	return;}#define S2 x=a->val[j];#define S3 x=x*b->val[i-j];#define S4 tradd(&carry,&sum,x);#define S5 c->val[i]=sum.yy.low&077777;#define S6 sum.xx=sum.xx>>15;#define S7 sum.yy.high=carry;m_mult(a,b,c) struct mint *a,*b,*c;{	long x;	union {long xx; struct half yy;} sum;	int carry;	int i,j;	c->val=xalloc(a->len+b->len,"m_mult");	sum.xx=0;	for(i=0;i<b->len;i++)	{	carry=0;		for(j=0;j<i+1;j++)		{	S2			S3			S4		}		S5		S6		S7	}	for(;i<a->len;i++)	{	carry=0;		for(j=i-b->len+1;j<i+1;j++)		{	S2			S3			S4		}		S5		S6		S7	}	for(;i<a->len+b->len;i++)	{	carry=0;		for(j=i-b->len+1;j<a->len;j++)		{	S2			S3			S4		}		S5		S6		S7	}	if(c->val[i-1]!=0)		c->len=a->len+b->len;	else	c->len=a->len+b->len-1;	return;}tradd(a,b,c) long c; int *a; union g {long xx; struct half yy;} *b;{	b->xx= b->xx+c;	if(b->yy.high&0100000)	{	b->yy.high= b->yy.high&077777;		*a += 1;	}	return;}

⌨️ 快捷键说明

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