1 #define _GNU_SOURCE
2 #include <stdio.h>
3 #include <stdlib.h>
4 
ecvt(double x,int n,int * dp,int * sign)5 char* ecvt(double x, int n, int* dp, int* sign) {
6     static char buf[16];
7     char tmp[32];
8     int i, j;
9 
10     if (n - 1U > 15)
11         n = 15;
12     sprintf(tmp, "%.*e", n - 1, x);
13     i = *sign = (tmp[0] == '-');
14     for (j = 0; tmp[i] != 'e'; j += (tmp[i++] != '.'))
15         buf[j] = tmp[i];
16     buf[j] = 0;
17     *dp = atoi(tmp + i + 1) + 1;
18 
19     return buf;
20 }
21