π
<-
Chat plein-écran
[^]

Numworks+Giac

Online

Numworks+Giac

Unread postby parisse » 03 Sep 2017, 09:32

J'ai partiellement reussi a integrer giac dans l'application de calculs, sur le simulateur uniquement bien sur (pas assez de flash pour la calculatrice physique).
Voici comment:
1/ Installer Giac/Xcas sur Mac, ca doit aussi marcher sous Linux (je n'ai pas teste)
2/ Dans le Makefile principal ajouter
Code: Select all
LDFLAGS = -lgiac

Sur Mac, il est peut-etre necessaire de mettre
Code: Select all
LDFLAGS = -L/Applications/usr/lib -lgiac

3/ Modifier apps/calculation/calculation.cpp, remplacer
Code: Select all
void Calculation::setContent(const char * c, Context * context) {
...
}

par
Code: Select all
extern "C" const char * caseval(const char *);

void Calculation::setContent(const char * c, Context * context) {
  reset();
#if 0
  strlcpy(m_inputText, c, sizeof(m_inputText));
#else
  static const char * bidon=caseval("init geogebra");
  const char * ans=caseval(c);
  strlcpy(m_inputText,ans,sizeof(m_inputText));
#endif
  Evaluation<double> * evaluation = input()->evaluate<double>(*context);
  evaluation->writeTextInBuffer(m_outputText, sizeof(m_outputText));
  delete evaluation;
}


Ensuite recompiler, par exemple avec gcc-7
Code: Select all
make PLATFORM=simulator CC=gcc-7 CXX=g++-7 LD=g++-7


Lancer ./app.elf, essayez par exemple int(1/x,1,2), observez que l'input est remplace le resultat exact du calcul fait par giac (en mode geogebra). J'aurais bien voulu remplacer l'output par le resultat mais ca ne marche pas parce qu'il y a surement un post-traitement qui veut un resultat approche. Mais l'objectif est atteint de mon cote, ca marche et c'est tres facile a mettre en oeuvre.
User avatar
parisseVIP++
Niveau 11: LV (Légende Vivante)
Niveau 11: LV (Légende Vivante)
Level up: 80.4%
 
Posts: 1804
Joined: 13 Dec 2013, 16:35
Gender: Not specified

Re: Numworks+Giac

Unread postby critor » 03 Sep 2017, 09:42

Bien. :)
Et donc, on a une estimation de la taille nécessaire ?
Image
User avatar
critorAdmin.
Niveau 18: DC (Deus ex Calculatorum)
Niveau 18: DC (Deus ex Calculatorum)
Level up: 98.2%
 
Posts: 33721
Images: 8795
Joined: 25 Oct 2008, 00:00
Location: Montpellier
Gender: Male
Calculator(s):
Class: Lycée
YouTube: critor3000
Twitter: critor2000
Facebook: critor.ti

Online

Re: Numworks+Giac

Unread postby parisse » 03 Sep 2017, 11:04

Je n'ai pas essaye de compiler la meme chose pour ARM vu que ca ne sert a rien pour le moment, mais il n'y a pas de raison que ca soit different de khicas, donc environ 5M (on peut economiser les flottants multi-precision et remplacer GMP par tommath, on ne peut pas compresser puisqu'il n'y a pas de ram pour decompresser).
User avatar
parisseVIP++
Niveau 11: LV (Légende Vivante)
Niveau 11: LV (Légende Vivante)
Level up: 80.4%
 
Posts: 1804
Joined: 13 Dec 2013, 16:35
Gender: Not specified

Online

Re: Numworks+Giac

Unread postby parisse » 03 Sep 2017, 14:20

Bon, j'ai reussi a avoir un historique plus standard avec giac, il faut modifier un peu plus le code source mais c'est quand meme mieux!
Dans le Makefile principal, rajouter -DGIAC a CXXFLAGS, ce qui donne
Code: Select all
CXXFLAGS = -DGIAC -g -std=c++11 -fno-exceptions -fno-rtti -fno-threadsafe-statics
LDFLAGS=-lgiac

Dans apps/calculation, il faut modifier 3 fichiers:
calculation.h:
Code: Select all
class Calculation {
public:
  Calculation();
  ~Calculation(); // Delete expression and layout, if needed
  Calculation& operator=(const Calculation& other);
  Calculation(const Calculation& other) = delete;
  Calculation(Calculation&& other) = delete;
  Calculation& operator=(Calculation&& other) = delete;
  /* c.reset() is the equivalent of c = Calculation() without copy assingment. */
  void reset();
  const char * inputText();
  const char * outputText();
  Poincare::Expression * input();
  Poincare::ExpressionLayout * inputLayout();
#ifdef GIAC
  Poincare::Expression * output(Poincare::Context * context);
#else
  Poincare::Evaluation<double> * output(Poincare::Context * context);
#endif
  Poincare::ExpressionLayout * outputLayout(Poincare::Context * context);
  void setContent(const char * c, Poincare::Context * context);
  bool isEmpty();
  void tidy();
private:
  char m_inputText[::TextField::maxBufferSize()];
  char m_outputText[2*::TextField::maxBufferSize()];
  Poincare::Expression * m_input;
  Poincare::ExpressionLayout * m_inputLayout;
#ifdef GIAC
  Poincare::Expression * m_output;
#else
  Poincare::Evaluation<double> * m_output;
#endif
  Poincare::ExpressionLayout * m_outputLayout;
};

calculation.cpp, 2 fonctions a modifier
Code: Select all
void Calculation::setContent(const char * c, Context * context) {
  reset();
#ifdef GIAC
  strlcpy(m_inputText, c, sizeof(m_inputText));
  static const char * bidon=caseval("init geogebra");
  const char * ans=caseval(c);
  strlcpy(m_outputText,ans,sizeof(m_outputText));
#else
  strlcpy(m_inputText, c, sizeof(m_inputText));
  Evaluation<double> * evaluation = input()->evaluate<double>(*context);
  evaluation->writeTextInBuffer(m_outputText, sizeof(m_outputText));
  delete evaluation;
#endif
}
...
#ifdef GIAC
Expression * Calculation::output(Context * context) {
  if (m_output == nullptr) {
    m_output = Expression::parse(m_outputText);
  }
  return m_output;
}

#else 
Evaluation<double> * Calculation::output(Context * context) {
  if (m_output == nullptr) {
    /* To ensure that the expression 'm_output' is a matrix or a complex, we
     * call 'evaluate'. */
    Expression * exp = Expression::parse(m_outputText);
    if (exp != nullptr) {
      m_output = exp->evaluate<double>(*context);
      delete exp;
    } else {
      m_output = new Complex<double>(Complex<double>::Float(NAN));
    }
  }
  return m_output;
}
#endif

enfin dans local_context.cpp, 1 fonction a modifier:
Code: Select all
Evaluation<double> * LocalContext::ansValue() {
  if (m_calculationStore->numberOfCalculations() == 0) {
    return m_parentContext->defaultExpression();
  }
  Calculation * lastCalculation = m_calculationStore->calculationAtIndex(m_calculationStore->numberOfCalculations()-1);
#ifdef GIAC
  return lastCalculation->output(m_parentContext)->evaluate<double>(*m_parentContext);
#else
  return lastCalculation->output(m_parentContext);
#endif
}
User avatar
parisseVIP++
Niveau 11: LV (Légende Vivante)
Niveau 11: LV (Légende Vivante)
Level up: 80.4%
 
Posts: 1804
Joined: 13 Dec 2013, 16:35
Gender: Not specified

Re: Numworks+Giac

Unread postby Adriweb » 03 Sep 2017, 14:27

On veut des screenshots ! ;)
User avatar
AdriwebAdmin.
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Level up: 51.7%
 
Posts: 12652
Images: 1081
Joined: 01 Jun 2007, 00:00
Location: France
Gender: Male
Calculator(s):
Class: (ingénieur)
Twitter: adriweb
GitHub: adriweb

Online

Re: Numworks+Giac

Unread postby parisse » 03 Sep 2017, 14:34

Comment on fait pour faire une capture de fenetre sur Mac?
User avatar
parisseVIP++
Niveau 11: LV (Légende Vivante)
Niveau 11: LV (Légende Vivante)
Level up: 80.4%
 
Posts: 1804
Joined: 13 Dec 2013, 16:35
Gender: Not specified

Re: Numworks+Giac

Unread postby Adriweb » 03 Sep 2017, 14:37

Cmd+Shift+4 pour faire une capture par sélection. Une fois que le curseur apparait, on peut alors appuyer sur la barre d'espace pour lui dire de capturer des fenêtres joliment.
Logiquement la capture arrive dans le dossiers Images, il suffira de la glisser sur la zone de texte pour répondre ici, ou de l'héberger sur imgur ou autre.
User avatar
AdriwebAdmin.
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Level up: 51.7%
 
Posts: 12652
Images: 1081
Joined: 01 Jun 2007, 00:00
Location: France
Gender: Male
Calculator(s):
Class: (ingénieur)
Twitter: adriweb
GitHub: adriweb

Online

Re: Numworks+Giac

Unread postby parisse » 03 Sep 2017, 14:41

Voila:
Image
User avatar
parisseVIP++
Niveau 11: LV (Légende Vivante)
Niveau 11: LV (Légende Vivante)
Level up: 80.4%
 
Posts: 1804
Joined: 13 Dec 2013, 16:35
Gender: Not specified

Online

Re: Numworks+Giac

Unread postby parisse » 03 Sep 2017, 18:31

Une autre plus formelle:
Image
User avatar
parisseVIP++
Niveau 11: LV (Légende Vivante)
Niveau 11: LV (Légende Vivante)
Level up: 80.4%
 
Posts: 1804
Joined: 13 Dec 2013, 16:35
Gender: Not specified

Re: Numworks+Giac

Unread postby Clifward » 03 Sep 2017, 18:31

Avoue, tu aimes bien nous faire baver devant quelque chose qui n'arrivera surement jamais... :(
Image
User avatar
Clifward
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Level up: 19.3%
 
Posts: 593
Images: 6
Joined: 20 Sep 2015, 17:50
Gender: Not specified
Calculator(s):
Class: CentraleSupelec

Next

Return to Programmation native (C/C++/...)

Who is online

Users browsing this forum: No registered users and 1 guest

-
Search
-
Featured topics
Concours TI-Planet-Casio de rentrée 2019. 3 défis pour plus d'une 15aine de calculatrices graphiques et nombre de goodies sortant de l'ordinaire ! :D
Comparaisons des meilleurs prix pour acheter sa calculatrice !
12
-
Donations / Premium
For more contests, prizes, reviews, helping us pay the server and domains...

Discover the the advantages of a donor account !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partner and ad
Notre partenaire Jarrety 
-
Stats.
485 utilisateurs:
>472 invités
>9 membres
>4 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)
-
Other interesting websites
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)