diff --git a/src/modules/_math/math.c b/src/modules/_math/math.c index c931240b4624ba9950a35a4bdabfeec3d969d68a..9378a0ff287e605af60e51d0e35c7cfda9bbd14b 100644 --- a/src/modules/_math/math.c +++ b/src/modules/_math/math.c @@ -29,7 +29,7 @@ #include <floatingpoint.h> #endif -RCSID("$Id: math.c,v 1.42 2002/01/16 02:56:10 nilsson Exp $"); +RCSID("$Id: math.c,v 1.43 2002/05/05 16:06:29 nilsson Exp $"); #ifndef M_PI #define M_PI 3.1415926535897932384626433832795080 @@ -207,12 +207,15 @@ void f_sqrt(INT32 args) if(sp[-args].type==T_INT) { + /* Note: This algorithm is also implemented in src/stuff.c */ unsigned INT32 n, b, s, y=0; unsigned INT16 x=0; /* FIXME: Note: Regards i as an unsigned value. */ + if(sp[-args].u.integer<0) Pike_error("math: sqrt(x) with (x < 0)\n"); n=sp[-args].u.integer; + for(b=1<<(sizeof(INT32)*8-2); b; b>>=2) { x<<=1; s=b+y; y>>=1;