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