#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; }