多倍長演算ライブラリ ルーチン32



[ 簡単な説明 ]

1〜nの大きさの乱数を生成します。
内部でスレーブルーチンとして、乱数ライブラリの urnd1( )を使用します。
(他のルーチンに変えても構いません。)


プログラム・ソース("lrnd1.c")           top (トップに戻る)
/*		lrnd1.c		*/
#include "longint.h"

LINT lrnd1(LINT n)
{
	LINT a;
	int i;

	a.sign = n.sign;
	do
	{
		i = a.len = n.len;
		while(--i)	a.num[i] = urnd1() * BASE;
		i = a.len;
		do
		{
			a.num[i] = urnd1() * (n.num[i] + 1);
			if(a.num[i] < n.num[i])	break;
		} while(lcmp(a, n) >= 0);
		while(a.num[a.len] == 0)	a.len--;
	} while(a.len == 0);
	a.num[0] = 0;
	return a;
}