--- gforth/engine/ecvt.c 1999/03/28 16:10:03 1.4 +++ gforth/engine/ecvt.c 2007/02/09 19:07:35 1.8 @@ -1,6 +1,6 @@ /* cheap ecvt replacement - Copyright (C) 1998 Free Software Foundation, Inc. + Copyright (C) 1998,2000 Free Software Foundation, Inc. This file is part of Gforth. @@ -16,7 +16,7 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA. */ #include @@ -33,6 +33,20 @@ char* ecvt(double x, int len, int* exp, int i, j; double z; + if (isnan(x)) { + *sign=0; + *exp=0; + return "nan"; + } + if (isinf(x)) { + *sign=0; /* this mimics the glibc ecvt */ + *exp=0; + if (x<0) + return "-inf"; + else + return "inf"; + } + if(len > (MAXCONV-1)) len = MAXCONV-1; if(x<0) @@ -56,6 +70,7 @@ char* ecvt(double x, int len, int* exp, for(i=0; i < len; i++) { z=floor(x); + if(z<0) z = 0; scratch[i]='0'+(char)((int)z); x = (x-z)*10; } @@ -94,3 +109,4 @@ int main(int argc, char ** argv) printf("ecvt Test: %f -> %s, %d, %d\n",9e0,conv,a,b); } #endif +