mpshortmult.c

来自「大数的计算包括加减乘除」· C语言 代码 · 共 43 行

C
43
字号
/* mpShortMult.c */

#include "bigdigits.h"

DIGIT_T mpShortMult(DIGIT_T w[], DIGIT_T u[], DIGIT_T v, 
					unsigned int ndigits)
{
	/*	Computes product w = u * v
		Returns overflow k
		where w, u are multiprecision integers of ndigits each
		and v, k are single precision digits

		Ref: Knuth Algorithm M.
	*/

	DIGIT_T k, t[2];
	unsigned int j;

	/*
	for (j = 0; j < ndigits; j++)
		w[j] = 0;
	*/

	if (v == 0) return 0;

	k = 0;
	for (j = 0; j < ndigits; j++)
	{
		/* t = x_i * v */
		spMultiply(t, u[j], v);
		/* w_i = LOHALF(t) + carry */
		w[j] = t[0] + k;
		/* Overflow? */
		if (w[j] < k)
			t[1]++;
		/* Carry forward HIHALF(t) */
		k = t[1];
	}

	return k;
}

⌨️ 快捷键说明

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