blob: d79a31a45cecd86b89a1764f50c243260fc21175 [file] [log] [blame]
#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
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 = 1;
if (n > 14U)
n = 14;
return (char*)"000000000000000" + 14 - n;
}
return ecvt(x, n - lz, dp, sign);
}