X-Git-Url: https://www.ginac.de/ginac.git//ginac.git?p=ginac.git;a=blobdiff_plain;f=ginac%2Fbasic.cpp;h=cf69c42cd2263dcfb722790ff65a7e2bacd4d8f6;hp=43dbf3366cebc54fb98a7b1810a889b9e5c89f97;hb=2c2f86ef17534853bc9b5e9c03229c5b57862d98;hpb=fb38db2d3476bf411940606824ef976187bf58f2 diff --git a/ginac/basic.cpp b/ginac/basic.cpp index 43dbf336..cf69c42c 100644 --- a/ginac/basic.cpp +++ b/ginac/basic.cpp @@ -302,11 +302,16 @@ ex basic::subs(const lst & ls, const lst & lr) const * @see ex::diff */ ex basic::diff(const symbol & s, unsigned nth) const { - // FIXME: Check if it is evaluated! + // trivial: zeroth derivative if (!nth) return ex(*this); + + // evaluate unevalueted *this before differentiating + if (!(flags & status_flags::evaluated)) + return ex(*this).diff(s, nth); + ex ndiff = derivative(s); - while (!ndiff.is_zero() && // stop differentiating zeroes + while (!ndiff.is_zero() && // stop differentiating zeros nth>1) { ndiff = ndiff.diff(s); --nth;