floating point operations
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

floating point operations



Hi all

I used this ftoa fun it doesnt working.
same function was working in PC version compiler

is there any options to add for floating point operations?

i also add the options like -mfpu=vfp -mfloat-abi-softfp

 but it also didnt work how to resolve this?

let me know

int my_ftoa (float x, char *str, char prec, char format)
{
/* converts a floating point number to an ascii string */
/* x is stored into str, which should be at least 30 chars long */
int ie, i, k, ndig, fstyle;
double y;
//if (nargs() != 7)
//  print_text("ftoa  ");
//ndig = ( prec<=0) ? 7 : (prec > 22 ? 23 : prec+1);
ndig = prec+1;
if(format == 'f' || format == 'F')
 fstyle = 1;
else
 fstyle = 0;
/* print in e format unless last arg is 'f' */
ie = 0;
/* if x negative, write minus and reverse */

if ( x < 0)
  {
  *str++ = '-';
  x = -x;
  }

// put x in range 1 <= x < 10
if (x > 0.0) while (x < 1.0)
  {
  x =x*10.0;
  ie--;
  }
while (x >= 10.0)
  {
  x = x/10.0;
  ie++;
  }
/* in f format, number of digits is related to size */
if (fstyle)
    ndig =ndig + ie;

/* round. x is between 1 and 10 and ndig will be printed to
   right of decimal point so rounding is ... */
for (y = i = 1; i < ndig; i++)
  y = y/10.0;
x =x+ y/2.0;
//if (x >= 10.0) {x = 1.0; ie++;} /* repair rounding disasters */
/* now loop.  put out a digit (obtain by multiplying by
  10, truncating, subtracting) until enough digits out */
/* if fstyle, and leading zeros, they go out special */
if (fstyle && ie<0)
  {
  *str++ = '0'; *str++ = '.';
  if (ndig < 0) ie = ie-ndig; /* limit zeros if underflow */
  for (i = -1; i > ie; i--)
    *str++ = '0';
  }
for (i=0; i < ndig; i++)
  {
  k = x;
  *str++ = k + '0';
  if (i == (fstyle ? ie : 0)) /* where is decimal point */
    *str++ = '.';
  x =- (y=k);
  x =x*10.0;
  }

/* now, in estyle,  put out exponent if not zero */
if (!fstyle && ie != 0)
  {
  *str++ = 'E';
  if (ie < 0)
    {
    ie = -ie;
    *str++ = '-';
    }
  for (k=100; k > ie; k =k/10);
  for (; k > 0; k =k/10)
       {
       *str++ = ie/k + '0';
       ie = ie%k;
       }
  }
*str = '\0';
return 0;
}



and I want to convert a floating point to an integer, store the value in int
format, in the above functions it hangs

how to resolve this problem? can anyone help me?


regards
nagendra