#include <errno.h>
#include <stdlib.h>
#include "alloc.h"
-#include "approx.h"
#include "data-in.h"
#include "error.h"
#include "julcal/julcal.h"
int nvar = 0;
/* New node. */
- struct nonterm_node *m;
+ struct nonterm_node *m = NULL;
/* Argument copying counter. */
int c;
/* 0*SYSMIS=0, 0/SYSMIS=0; otherwise, SYSMIS and infinities
produce SYSMIS. */
- if (approx_eq (cval, 0.0) && n->type == OP_MUL)
+ if (cval == 0.0 && n->type == OP_MUL)
nvar = 0;
else if (sysmis || !finite (cval))
{
{
/* Otherwise consolidate all the nonconstant terms. */
m = xmalloc (sizeof (struct nonterm_node)
- + ((nvar + approx_ne (cval, def) - 1)
+ + ((nvar + (cval != def) - 1)
* sizeof (union any_node *)));
for (i = c = 0; i < n->n; i++)
if (n->arg[i]->type != OP_NUM_CON)
else
free_node (n->arg[i]);
- if (approx_ne (cval, def))
+ if (cval != def)
{
m->arg[c] = xmalloc (sizeof (struct num_con_node));
m->arg[c]->num_con.type = OP_NUM_CON;
{
if (n->arg[1]->type == OP_NUM_CON)
{
- if (approx_eq (n1, 1.0))
+ if (n1 == 1.0)
{
struct nonterm_node *m = (struct nonterm_node *) n->arg[0];
free (n);
return m;
}
- else if (approx_eq (n1, 2.0))
+ else if (n1 == 2.0)
{
n = xrealloc (n, sizeof (struct nonterm_node));
n->type = OP_SQUARE;
return optimize_tree (n);
case OP_POW:
- if (approx_eq (n0, 0.0) && approx_eq (n1, 0.0))
+ if (n0 == 0.0 && n1 == 0.0)
frnc (SYSMIS);
else if (n0 == SYSMIS && n1 == 0.0)
frnc (1.0);
break;
case OP_EQ:
- rnc (approx_eq (n0, n1));
+ rnc (n0 == n1);
break;
case OP_GE:
- rnc (approx_ge (n0, n1));
+ rnc (n0 >= n1);
break;
case OP_GT:
- rnc (approx_gt (n0, n1));
+ rnc (n0 > n1);
break;
case OP_LE:
- rnc (approx_le (n0, n1));
+ rnc (n0 <= n1);
break;
case OP_LT:
- rnc (approx_lt (n0, n1));
+ rnc (n0 < n1);
break;
case OP_NE:
- rnc (approx_ne (n0, n1));
+ rnc (n0 != n1);
break;
/* String operators. */
for (i = 1; i < n->n; i++)
{
ni = n->arg[i]->num_con.value;
- if (approx_eq (n0, ni))
+ if (n0 == ni)
{
frnc (1.0);
goto any_done;
if (min == SYSMIS || max == SYSMIS)
continue;
sysmis = 0;
- if (approx_ge (n0, min) && approx_le (n0, max))
+ if (n0 >= min && n0 <= max)
{
frnc (1.0);
goto range_done;
case OP_RTRIM:
case OP_RTRIM_OPT:
{
- int c;
+ int c = ' ';
char *cp = s0;
if (n->type == OP_LTRIM_OPT || n->type == OP_RTRIM_OPT)
c = n->type == OP_LTRIM_OPT ? 'L' : 'R';
msg (SE, _("Second argument to %cTRIM() must be at least one "
"character in length."), c);
- c = ' ';
}
else
c = s1[0];
rnc (1.0 / n0);
break;
case OP_MOD:
- if (approx_eq (n0, 0.0) && n1 == SYSMIS)
+ if (n0 == 0.0 && n1 == SYSMIS)
frnc (0.0);
else
rnc (fmod (n0, n1));
break;
case OP_NUM_TO_BOOL:
- if (approx_eq (n0, 0.0))
+ if (n0 == 0.0)
n0 = 0.0;
- else if (approx_eq (n0, 1.0))
+ else if (n0 == 1.0)
n0 = 1.0;
else if (n0 != SYSMIS)
{