Branch: Tag:

1997-04-28

1997-04-28 23:49:11 by Fredrik Hübinette (Hubbe) <hubbe@hubbe.net>

division and modulo changed

Rev: src/modules/Gmp/mpz_glue.c:1.16
Rev: src/operators.c:1.14
Rev: src/testsuite.in:1.40

5:   \*/   #include <math.h>   #include "global.h" - RCSID("$Id: operators.c,v 1.13 1997/04/16 03:09:15 hubbe Exp $"); + RCSID("$Id: operators.c,v 1.14 1997/04/28 23:48:42 hubbe Exp $");   #include "interpret.h"   #include "svalue.h"   #include "multiset.h"
991:    return;       case T_INT: +  { +  INT32 tmp;    if (sp[-1].u.integer == 0)    error("Division by zero\n");    sp--; -  sp[-1].u.integer /= sp[0].u.integer; +  +  tmp=sp[-1].u.integer / sp[0].u.integer; +  if(tmp<0) +  if(tmp * sp[0].u.integer > sp[-1].u.integer) +  tmp--; +  sp[-1].u.integer=tmp;    return; -  +  }       default:    error("Bad argument 1 to divide.\n");
1047:    case T_INT:    if (sp[-1].u.integer == 0) error("Modulo by zero.\n");    sp--; +  if(sp[-1].u.integer>=0) +  { +  if(sp[0].u.integer>=0) +  {    sp[-1].u.integer %= sp[0].u.integer; -  +  }else{ +  sp[-1].u.integer=sp[0].u.integer+(sp[-1].u.integer % -sp[0].u.integer); +  } +  }else{ +  if(sp[0].u.integer>=0) +  { +  sp[-1].u.integer=sp[0].u.integer-(-sp[-1].u.integer % sp[0].u.integer); +  }else{ +  sp[-1].u.integer=-(-sp[-1].u.integer % -sp[0].u.integer); +  } +  }    return;       default: