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



[ 簡単な説明 ]

単位n(|n|<100)だけデクリメントします。


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

/* decrement LINT */

void ldec(LINT *a, int n)
{
	if(n == 0)	return;
	if(n <= -BASE || n >= BASE)
	{
		fprintf(stderr, "Error : illegal parameter input in ldec().\n");
		return;
	}
	if(a->len == 0)
	{
		*a = lset(-n);
		return;
	}
	if(a->sign == 0)
	{
		if(n > 0)	aldec(a, n);
		else		alinc(a, -n);
	}
	else
	{
		if(n > 0)	alinc(a, n);
		else
		{
			a->sign = 0;
			aldec(a, -n);
			a->sign = (a->sign == 0) ? -1: 0;
		}
	}
	return;
}