Uses NAN macro if defined.

This commit is contained in:
Lewis Van Winkle
2016-05-25 12:17:39 -05:00
parent bcd6c85640
commit 5e3b8f2ee3

View File

@@ -28,6 +28,10 @@
#include <string.h> #include <string.h>
#include <stdio.h> #include <stdio.h>
#ifndef NAN
#define NAN (0.0/0.0)
#endif
typedef double (*te_fun2)(double, double); typedef double (*te_fun2)(double, double);
enum { enum {
@@ -322,7 +326,7 @@ static te_expr *base(state *s) {
default: default:
ret = new_expr(0, 0); ret = new_expr(0, 0);
s->type = TOK_ERROR; s->type = TOK_ERROR;
ret->value = 0.0/0.0; ret->value = NAN;
break; break;
} }
@@ -415,7 +419,7 @@ static te_expr *list(state *s) {
double te_eval(const te_expr *n) { double te_eval(const te_expr *n) {
if (!n) return 0.0/0.0; if (!n) return NAN;
switch(TYPE_MASK(n->type)) { switch(TYPE_MASK(n->type)) {
case TE_CONSTANT: return n->value; case TE_CONSTANT: return n->value;
@@ -432,7 +436,7 @@ double te_eval(const te_expr *n) {
case 5: return TE_FUN(double, double, double, double, double)(M(0), M(1), M(2), M(3), M(4)); case 5: return TE_FUN(double, double, double, double, double)(M(0), M(1), M(2), M(3), M(4));
case 6: return TE_FUN(double, double, double, double, double, double)(M(0), M(1), M(2), M(3), M(4), M(5)); case 6: return TE_FUN(double, double, double, double, double, double)(M(0), M(1), M(2), M(3), M(4), M(5));
case 7: return TE_FUN(double, double, double, double, double, double, double)(M(0), M(1), M(2), M(3), M(4), M(5), M(6)); case 7: return TE_FUN(double, double, double, double, double, double, double)(M(0), M(1), M(2), M(3), M(4), M(5), M(6));
default: return 0.0/0.0; default: return NAN;
} }
case TE_CLOSURE0: case TE_CLOSURE1: case TE_CLOSURE2: case TE_CLOSURE3: case TE_CLOSURE0: case TE_CLOSURE1: case TE_CLOSURE2: case TE_CLOSURE3:
@@ -446,10 +450,10 @@ double te_eval(const te_expr *n) {
case 5: return TE_FUN(void*, double, double, double, double, double)(n->parameters[5], M(0), M(1), M(2), M(3), M(4)); case 5: return TE_FUN(void*, double, double, double, double, double)(n->parameters[5], M(0), M(1), M(2), M(3), M(4));
case 6: return TE_FUN(void*, double, double, double, double, double, double)(n->parameters[6], M(0), M(1), M(2), M(3), M(4), M(5)); case 6: return TE_FUN(void*, double, double, double, double, double, double)(n->parameters[6], M(0), M(1), M(2), M(3), M(4), M(5));
case 7: return TE_FUN(void*, double, double, double, double, double, double, double)(n->parameters[7], M(0), M(1), M(2), M(3), M(4), M(5), M(6)); case 7: return TE_FUN(void*, double, double, double, double, double, double, double)(n->parameters[7], M(0), M(1), M(2), M(3), M(4), M(5), M(6));
default: return 0.0/0.0; default: return NAN;
} }
default: return 0.0/0.0; default: return NAN;
} }
} }
@@ -514,7 +518,7 @@ double te_interp(const char *expression, int *error) {
ret = te_eval(n); ret = te_eval(n);
te_free(n); te_free(n);
} else { } else {
ret = 0.0/0.0; ret = NAN;
} }
return ret; return ret;
} }