#define _GNU_SOURCE #include #include #include char *fcvt(double x, int n, int *dp, int *sign) { char tmp[1500]; int i, lz; if (n > 1400U) n = 1400; sprintf(tmp, "%.*f", n, x); i = (tmp[0] == '-'); if (tmp[i] == '0') lz = strspn(tmp+i+2, "0"); else lz = -(int)strcspn(tmp+i, "."); if (n<=lz) { *sign = i; *dp = 0; if (n>14U) n = 14; return "000000000000000"+14-n; } return ecvt(x, n-lz, dp, sign); }