return s;
}
+double tenpower(int n)
+{
+ double t = 1.0;
+ int i;
+ for (i = 0; i < n; i++) {
+ t *= 10;
+ }
+ for (i = 0; i > n; i--) {
+ t /= 10;
+ }
+ return t;
+}
+
+int getexponant (double *f, int maxexp)
+{
+ int exp = 0;
+ while (*f > 10) {
+ *f /= 10;
+ exp++;
+ }
+ while (*f < 1) {
+ *f *= 10;
+ exp--;
+ }
+ *f += tenpower (maxexp - 1);
+ if (*f >= 10) {
+ *f /= 10;
+ exp++;
+ }
+
+ return exp;
+}
/* simple fprintf function */
int fdprintf (int fd, const char *fmt, ...)
/* process format char */
switch (*fmt++) {
+ case '%': /* percent */
+ *str++ = '%';
+ break;
case 'c': /* char */
c = (char) va_arg (ap, int);
*str++ = c;
*str++ = '-';
f = -f;
}
- t = 0;
- while (f > 10) {
- f /= 10;
- t++;
- }
- while (f < 1) {
- f *= 10;
- t--;
- }
- f += 1e-7;
- if (f >= 10) {
- f /= 10;
- t++;
- }
+ if (sz == 0) sz = 6;
+ t = getexponant (&f, -sz);
u = (int)f;
str = itoa (str, u, 0);
- d = (int)((f - u) * 1e6);
+ d = (int)((f - u) * tenpower (sz));
if (d > 0) {
*str++ = '.';
- str = itoa (str, d, 6);
+ str = itoa (str, d, sz);
+ }
+ while (*(str - 1) == '0') {
+ str--;
}
if (t != 0) {
*str++ = 'e';