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); } }
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); }
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); } // ここには来ない }
//------------------------------------------- //destructor derlist::~derlist ( ) { setfirst ( NULL ); setlast ( NULL ); }