Fix bug where the nth derivative of 0^n evaluated to 0 instead of n!

(complement to commit cd0bc28e)
time-shift
Sébastien Villemot 2012-05-21 18:34:10 +02:00
parent dc5a952bd9
commit f36f76760a
4 changed files with 4 additions and 4 deletions

View File

@ -1253,7 +1253,7 @@ public:
int derivOrder = nearbyint(Stackf.top());
Stackf.pop();
if (fabs(v1f) < NEAR_ZERO && v2f > 0
&& derivOrder >= v2f
&& derivOrder > v2f
&& fabs(v2f-nearbyint(v2f)) < NEAR_ZERO)
{
r = 0.0;

View File

@ -890,7 +890,7 @@ Interpreter::compute_block_time(int Per_u_, bool evaluate, int block_num, int si
try
{
if (fabs(v1) < NEAR_ZERO && v2 > 0
&& derivOrder >= v2
&& derivOrder > v2
&& fabs(v2-nearbyint(v2)) < NEAR_ZERO)
Stack.push(0.0);
else

View File

@ -685,7 +685,7 @@ DataTree::writePowerDeriv(ostream &output, bool use_dll) const
<< "#ifdef _MSC_VER" << endl
<< "# define nearbyint(x) (fabs((x)-floor(x)) < fabs((x)-ceil(x)) ? floor(x) : ceil(x))" << endl
<< "#endif" << endl
<< " if ( fabs(x) < " << NEAR_ZERO << " && p > 0 && k >= p && fabs(p-nearbyint(p)) < " << NEAR_ZERO << " )" << endl
<< " if ( fabs(x) < " << NEAR_ZERO << " && p > 0 && k > p && fabs(p-nearbyint(p)) < " << NEAR_ZERO << " )" << endl
<< " return 0.0;" << endl
<< " else" << endl
<< " {" << endl

View File

@ -2598,7 +2598,7 @@ BinaryOpNode::eval_opcode(double v1, BinaryOpcode op_code, double v2, int derivO
return (pow(v1, v2));
case oPowerDeriv:
if (fabs(v1) < NEAR_ZERO && v2 > 0
&& derivOrder >= v2
&& derivOrder > v2
&& fabs(v2-nearbyint(v2)) < NEAR_ZERO)
return 0.0;
else