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