Merge branch 'accurate-reader-writer'
This commit is contained in:
commit
9eee644ad8
|
@ -330,9 +330,6 @@ int xvfprintf(pic_state *pic, xFILE *stream, const char *fmt, va_list ap) {
|
|||
const char *p;
|
||||
char *sval;
|
||||
int ival;
|
||||
#if PIC_ENABLE_FLOAT
|
||||
double dval, dint;
|
||||
#endif
|
||||
void *vp;
|
||||
int cnt = 0;
|
||||
|
||||
|
@ -349,7 +346,16 @@ int xvfprintf(pic_state *pic, xFILE *stream, const char *fmt, va_list ap) {
|
|||
cnt += print_int(pic, stream, ival, 10);
|
||||
break;
|
||||
#if PIC_ENABLE_FLOAT
|
||||
case 'f':
|
||||
# if PIC_ENABLE_LIBC
|
||||
case 'f': {
|
||||
char buf[100];
|
||||
sprintf(buf, "%g", va_arg(ap, double));
|
||||
xfputs(pic, buf, stream);
|
||||
break;
|
||||
}
|
||||
# else
|
||||
case 'f': {
|
||||
double dval, dint;
|
||||
dval = modf(va_arg(ap, double), &dint);
|
||||
if (dint < 0 || dval < 0) { /* either may be zero */
|
||||
xputc(pic, '-', stream);
|
||||
|
@ -369,6 +375,8 @@ int xvfprintf(pic_state *pic, xFILE *stream, const char *fmt, va_list ap) {
|
|||
cnt += print_int(pic, stream, ival, 10);
|
||||
}
|
||||
break;
|
||||
}
|
||||
# endif
|
||||
#endif
|
||||
case 's':
|
||||
sval = va_arg(ap, char*);
|
||||
|
|
|
@ -267,15 +267,25 @@ read_unsigned(pic_state *pic, struct pic_port *port, int c)
|
|||
{
|
||||
unsigned u;
|
||||
int exp, s, i, e;
|
||||
#if PIC_ENABLE_FLOAT
|
||||
double f, g;
|
||||
#endif
|
||||
|
||||
u = read_uinteger(pic, port, c);
|
||||
|
||||
switch (peek(pic, port)) {
|
||||
#if PIC_ENABLE_FLOAT
|
||||
case '.':
|
||||
# if PIC_ENABLE_LIBC
|
||||
case '.': {
|
||||
char buf[256];
|
||||
i = sprintf(buf, "%d", u);
|
||||
buf[i++] = next(pic, port);
|
||||
while (isdigit(c = peek(pic, port))) {
|
||||
buf[i++] = next(pic, port);
|
||||
}
|
||||
sprintf(buf + i, "e%d", read_suffix(pic, port));
|
||||
return pic_float_value(atof(buf));
|
||||
}
|
||||
# else
|
||||
case '.': {
|
||||
double f, g;
|
||||
next(pic, port);
|
||||
g = 0, e = 0;
|
||||
while (isdigit(c = peek(pic, port))) {
|
||||
|
@ -301,6 +311,8 @@ read_unsigned(pic_state *pic, struct pic_port *port, int c)
|
|||
exp >>= 1;
|
||||
}
|
||||
return pic_float_value(f);
|
||||
}
|
||||
# endif
|
||||
#endif
|
||||
|
||||
default:
|
||||
|
|
Loading…
Reference in New Issue