jean-baptiste boric a écrit:Il suffit de modifier deux constantes aux bons endroits pour réactiver le calcul symbolique comme avant. J'avoue ne pas vraiment saisir la finalité de cette modification...
C'est ou qu'il faut faire les modifications? J'aimerais re-injecter giac pour la N110, j'arrive bien a appeler mon parser/evaluateur, mais des que le resultat est symbolique, l'affichage en reponse est undef.
Les modifs que j'ai faites:
Dans scripts/config.mak: ajouter
LDFLAGS += -lgiac
SFLAGS += -DGIAC
Dans apps/calculation.cpp
1/ avant namespace ... ajouter
- Code: Tout sélectionner
#ifdef GIAC
extern "C" const char * caseval(const char *);
#endif
2/ modifier Calculation::setContent (pour l'instant je n'ai pas mis de bound checking ni fait l'evaluation en approx)
- Code: Tout sélectionner
void Calculation::setContent(const char * c, Context * context, Expression ansExpression) {
reset();
#ifdef GIAC
const char * out=caseval(c);
strcpy(m_inputText,c);
strcpy(m_exactOutputText,out);
strcpy(m_approximateOutputText,out);
#else
{
Symbol ansSymbol = Symbol::Ans();
Expression input = Expression::Parse(c).replaceSymbolWithExpression(ansSymbol, ansExpression);
/* We do not store directly the text enter by the user because we do not want
* to keep Ans symbol in the calculation store. */
PoincareHelpers::Serialize(input, m_inputText, sizeof(m_inputText));
}
Expression exactOutput;
Expression approximateOutput;
PoincareHelpers::ParseAndSimplifyAndApproximate(m_inputText, &exactOutput, &approximateOutput, *context, false);
PoincareHelpers::Serialize(exactOutput, m_exactOutputText, sizeof(m_exactOutputText));
PoincareHelpers::Serialize(approximateOutput, m_approximateOutputText, sizeof(m_approximateOutputText));
#endif
}