use MAXBIGINT_DOUBLE which does not overflow when casting back to bigint

This commit is contained in:
Axel Kohlmeyer
2023-02-11 18:59:52 -05:00
parent e99ec32b4b
commit fbe30ffec6
2 changed files with 18 additions and 13 deletions

View File

@ -2721,8 +2721,8 @@ double Variable::collapse_tree(Tree *tree)
else if (update->ntimestep < ivalue2) {
bigint offset = update->ntimestep - ivalue1;
tree->value = ivalue1 + (offset/ivalue3)*ivalue3 + ivalue3;
if (tree->value > ivalue2) tree->value = (double) MAXBIGINT;
} else tree->value = (double) MAXBIGINT;
if (tree->value > ivalue2) tree->value = (double) MAXBIGINT_DOUBLE;
} else tree->value = (double) MAXBIGINT_DOUBLE;
return tree->value;
}
@ -2758,11 +2758,11 @@ double Variable::collapse_tree(Tree *tree)
if (istep > ivalue5) {
offset = ivalue5 - ivalue1;
istep = ivalue1 + (offset/ivalue3)*ivalue3 + ivalue3;
if (istep > ivalue2) istep = MAXBIGINT;
if (istep > ivalue2) istep = MAXBIGINT_DOUBLE;
}
}
} else istep = MAXBIGINT;
tree->value = istep;
} else istep = MAXBIGINT_DOUBLE;
tree->value = (double)istep;
return tree->value;
}
@ -3060,8 +3060,8 @@ double Variable::eval_tree(Tree *tree, int i)
else if (update->ntimestep < ivalue2) {
bigint offset = update->ntimestep - ivalue1;
arg = ivalue1 + (offset/ivalue3)*ivalue3 + ivalue3;
if (arg > ivalue2) arg = (double) MAXBIGINT;
} else arg = (double) MAXBIGINT;
if (arg > ivalue2) arg = (double) MAXBIGINT_DOUBLE;
} else arg = (double) MAXBIGINT_DOUBLE;
return arg;
}
@ -3092,10 +3092,10 @@ double Variable::eval_tree(Tree *tree, int i)
if (istep > ivalue5) {
offset = ivalue5 - ivalue1;
istep = ivalue1 + (offset/ivalue3)*ivalue3 + ivalue3;
if (istep > ivalue2) istep = MAXBIGINT;
if (istep > ivalue2) istep = MAXBIGINT_DOUBLE;
}
}
} else istep = MAXBIGINT;
} else istep = MAXBIGINT_DOUBLE;
arg = istep;
return arg;
}
@ -3627,8 +3627,8 @@ int Variable::math_function(char *word, char *contents, Tree **tree, Tree **tree
else if (update->ntimestep < ivalue2) {
bigint offset = update->ntimestep - ivalue1;
value = ivalue1 + (offset/ivalue3)*ivalue3 + ivalue3;
if (value > ivalue2) value = (double) MAXBIGINT;
} else value = (double) MAXBIGINT;
if (value > ivalue2) value = (double) MAXBIGINT_DOUBLE;
} else value = (double) MAXBIGINT_DOUBLE;
argstack[nargstack++] = value;
}
@ -3662,10 +3662,10 @@ int Variable::math_function(char *word, char *contents, Tree **tree, Tree **tree
if (istep > ivalue5) {
offset = ivalue5 - ivalue1;
istep = ivalue1 + (offset/ivalue3)*ivalue3 + ivalue3;
if (istep > ivalue2) istep = MAXBIGINT;
if (istep > ivalue2) istep = MAXBIGINT_DOUBLE;
}
}
} else istep = MAXBIGINT;
} else istep = MAXBIGINT_DOUBLE;
double value = istep;
argstack[nargstack++] = value;
}