version 1.32, 2020/12/09 20:00:11 |
version 1.33, 2020/12/18 21:36:24 |
|
|
return(vp->fval); |
return(vp->fval); |
} |
} |
|
|
|
static char *get_inf_nan(double d) |
|
{ |
|
if (isinf(d)) { |
|
return (d < 0 ? "-inf" : "+inf"); |
|
} else if (isnan(d)) { |
|
return (signbit(d) != 0 ? "-nan" : "+nan"); |
|
} else |
|
return NULL; |
|
} |
|
|
static char *get_str_val(Cell *vp, char **fmt) /* get string val of a Cell */ |
static char *get_str_val(Cell *vp, char **fmt) /* get string val of a Cell */ |
{ |
{ |
int n; |
int n; |
double dtemp; |
double dtemp; |
|
char *p; |
|
|
if ((vp->tval & (NUM | STR)) == 0) |
if ((vp->tval & (NUM | STR)) == 0) |
funnyvar(vp, "read value of"); |
funnyvar(vp, "read value of"); |
|
|
{ \ |
{ \ |
if (freeable(vp)) \ |
if (freeable(vp)) \ |
xfree(vp->sval); \ |
xfree(vp->sval); \ |
if (modf(vp->fval, &dtemp) == 0) /* it's integral */ \ |
if ((p = get_inf_nan(vp->fval)) != NULL) \ |
|
n = (vp->sval = strdup(p)) ? 0 : -1; \ |
|
else if (modf(vp->fval, &dtemp) == 0) /* it's integral */ \ |
n = asprintf(&vp->sval, "%.30g", vp->fval); \ |
n = asprintf(&vp->sval, "%.30g", vp->fval); \ |
else \ |
else \ |
n = asprintf(&vp->sval, *fmt, vp->fval); \ |
n = asprintf(&vp->sval, *fmt, vp->fval); \ |