Diff for /gforth/engine/ecvt.c between versions 1.1 and 1.8

version 1.1, 1997/05/21 20:40:07 version 1.8, 2007/02/09 19:07:35
Line 1 Line 1
 /* cheap ecvt replacement */  /* cheap ecvt replacement
   
     Copyright (C) 1998,2000 Free Software Foundation, Inc.
   
     This file is part of Gforth.
   
     Gforth is free software; you can redistribute it and/or
     modify it under the terms of the GNU General Public License
     as published by the Free Software Foundation; either version 2
     of the License, or (at your option) any later version.
   
     This program is distributed in the hope that it will be useful,
     but WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     GNU General Public License for more details.
   
     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., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
   */
   
   #include <stdio.h>
 #include "config.h"  #include "config.h"
 #include <math.h>  #include <math.h>
 extern double floor(double);  extern double floor(double);
Line 13  char* ecvt(double x, int len, int* exp, Line 33  char* ecvt(double x, int len, int* exp,
    int i, j;     int i, j;
    double z;     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(len > (MAXCONV-1)) len = MAXCONV-1;
         
    if(x<0)     if(x<0)
Line 36  char* ecvt(double x, int len, int* exp, Line 70  char* ecvt(double x, int len, int* exp,
    for(i=0; i < len; i++)     for(i=0; i < len; i++)
      {       {
         z=floor(x);          z=floor(x);
           if(z<0) z = 0;
         scratch[i]='0'+(char)((int)z);          scratch[i]='0'+(char)((int)z);
         x = (x-z)*10;          x = (x-z)*10;
      }       }
Line 53  char* ecvt(double x, int len, int* exp, Line 88  char* ecvt(double x, int len, int* exp,
                   scratch[j]='0';                    scratch[j]='0';
                }                 }
           }            }
         if(j==0)          if(j<0)
           {            {
              scratch[0]='1';               scratch[0]='1';
              *exp += 1;               *exp += 1;
Line 69  char* ecvt(double x, int len, int* exp, Line 104  char* ecvt(double x, int len, int* exp,
 int main(int argc, char ** argv)  int main(int argc, char ** argv)
 {  {
    int a, b;     int a, b;
    char * conv=ecvt(PI*1e10,20,&a,&b);     char * conv=ecvt(9e0,20,&a,&b);
         
    printf("ecvt Test: %f -> %s, %d, %d\n",PI,conv,a,b);     printf("ecvt Test: %f -> %s, %d, %d\n",9e0,conv,a,b);
 }  }
 #endif  #endif
   

Removed from v.1.1  
changed lines
  Added in v.1.8


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>