#define _GNU_SOURCE #include #include char* ecvt(double x, int n, int* dp, int* sign) { static char buf[16]; char tmp[32]; int i, j; if (n - 1U > 15) n = 15; sprintf(tmp, "%.*e", n - 1, x); i = *sign = (tmp[0] == '-'); for (j = 0; tmp[i] != 'e'; j += (tmp[i++] != '.')) buf[j] = tmp[i]; buf[j] = 0; *dp = atoi(tmp + i + 1) + 1; return buf; }