Beispiel #1
0
CELLP plus_f(CELLP args)
{
	NUM val;
	NUMP np;

	args = setfirst(args, &np);
	ec;
	if (args == (CELLP)nil) {
		return (CELLP)np;
	}
	args = get1arg(args, &val);
	ec;
	if (np->id == _FIX) {
		while (val.id == _FIX) {
			np->value.fix += val.value.fix;
			if (args == (CELLP)nil) {
				return (CELLP)np;
			}
			args = get1arg(args, &val);
			ec;
		}
		toflt(np);
	} else {
		toflt(&val);
	}
	for (;;) {
		np->value.flt += val.value.flt;
		if (args == (CELLP)nil) {
			return (CELLP)np;
		}
		args = get1arg(args, &val);
		ec;
		toflt(&val);
	}
}
Beispiel #2
0
CELLP remainder_f(CELLP args)
{
	NUM val;
	NUMP np;

	args = setfirst(args, &np); ec;
	if (args == (CELLP)nil) {
		return (CELLP)np;
	}
	args = get1arg(args, &val); ec;
	if (np->id == _FIX) {
		while (val.id == _FIX) {
			np->value.fix %= val.value.fix;
			if (args == (CELLP)nil) {
				return (CELLP)np;
			}
			args = get1arg(args, &val); ec;
		}
	}
	return error(IAF);
}
Beispiel #3
0
CELLP quotient_f(CELLP args)
{
	NUM val;
	NUMP np;

	args = setfirst(args, &np); ec;
	if (args == (CELLP)nil) {
		return (CELLP)np;
	}
	args = get1arg(args, &val); ec;
	if (np->id == _FIX) {
		while (val.id == _FIX) {
			if (val.value.fix == 0) {
				return error(DIVZERO);
			}
			np->value.fix /= val.value.fix;
			if (args == (CELLP)nil) {
				return (CELLP)np;
			}
			args = get1arg(args, &val); ec;
		}
		toflt(np);
	} else {
		toflt(&val);
	}
	for (;;) {
		if (val.value.flt == 0) {
			return error(DIVZERO);
		}
		np->value.flt /= val.value.flt;
		if (args == (CELLP)nil) {
			return (CELLP)np;
		}
		args = get1arg(args, &val); ec;
		toflt(&val);
	}
	// ここには来ない
}
Beispiel #4
0
//-------------------------------------------
//destructor
derlist::~derlist ( ) 
{
	setfirst ( NULL ); 
	setlast ( NULL ); 
}