fcvt.c raw

   1  #define _GNU_SOURCE
   2  #include <stdlib.h>
   3  #include <stdio.h>
   4  #include <string.h>
   5  
   6  char *fcvt(double x, int n, int *dp, int *sign)
   7  {
   8  	char tmp[1500];
   9  	int i, lz;
  10  
  11  	if (n > 1400U) n = 1400;
  12  	sprintf(tmp, "%.*f", n, x);
  13  	i = (tmp[0] == '-');
  14  	if (tmp[i] == '0') lz = strspn(tmp+i+2, "0");
  15  	else lz = -(int)strcspn(tmp+i, ".");
  16  
  17  	if (n<=lz) {
  18  		*sign = i;
  19  		*dp = 1;
  20  		if (n>14U) n = 14;
  21  		return "000000000000000"+14-n;
  22  	}
  23  
  24  	return ecvt(x, n-lz, dp, sign);
  25  }
  26