π
<-
Chat plein-écran
[^]

Numworks+Giac

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 12: CP (Calculatrice sur Pattes)
Niveau 12: CP (Calculatrice sur Pattes)
Level up: 84.5%
 
Posts: 3632
Joined: 13 Dec 2013, 16:35
Gender: Not specified
Calculator(s):
MyCalcs profile

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 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Level up: 46.3%
 
Posts: 41907
Images: 15444
Joined: 25 Oct 2008, 00:00
Location: Montpellier
Gender: Male
Calculator(s):
MyCalcs profile
YouTube: critor3000
Twitter: critor2000
GitHub: critor

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 12: CP (Calculatrice sur Pattes)
Niveau 12: CP (Calculatrice sur Pattes)
Level up: 84.5%
 
Posts: 3632
Joined: 13 Dec 2013, 16:35
Gender: Not specified
Calculator(s):
MyCalcs profile

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 12: CP (Calculatrice sur Pattes)
Niveau 12: CP (Calculatrice sur Pattes)
Level up: 84.5%
 
Posts: 3632
Joined: 13 Dec 2013, 16:35
Gender: Not specified
Calculator(s):
MyCalcs profile

Re: Numworks+Giac

Unread postby Adriweb » 03 Sep 2017, 14:27

On veut des screenshots ! ;)

MyCalcs: Help the community's calculator documentations by filling out your calculators info!
MyCalcs: Aidez la communauté à documenter les calculatrices en donnant des infos sur vos calculatrices !
Inspired-Lua.org: All about TI-Nspire Lua programming (tutorials, wiki/docs...)
My calculator programs
Mes programmes pour calculatrices
User avatar
AdriwebAdmin
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Level up: 78.8%
 
Posts: 14725
Images: 1119
Joined: 01 Jun 2007, 00:00
Location: France
Gender: Male
Calculator(s):
MyCalcs profile
Twitter: adriweb
GitHub: adriweb

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 12: CP (Calculatrice sur Pattes)
Niveau 12: CP (Calculatrice sur Pattes)
Level up: 84.5%
 
Posts: 3632
Joined: 13 Dec 2013, 16:35
Gender: Not specified
Calculator(s):
MyCalcs profile

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.

MyCalcs: Help the community's calculator documentations by filling out your calculators info!
MyCalcs: Aidez la communauté à documenter les calculatrices en donnant des infos sur vos calculatrices !
Inspired-Lua.org: All about TI-Nspire Lua programming (tutorials, wiki/docs...)
My calculator programs
Mes programmes pour calculatrices
User avatar
AdriwebAdmin
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Level up: 78.8%
 
Posts: 14725
Images: 1119
Joined: 01 Jun 2007, 00:00
Location: France
Gender: Male
Calculator(s):
MyCalcs profile
Twitter: adriweb
GitHub: adriweb

Re: Numworks+Giac

Unread postby parisse » 03 Sep 2017, 14:41

Voila:
Image
User avatar
parisseVIP++
Niveau 12: CP (Calculatrice sur Pattes)
Niveau 12: CP (Calculatrice sur Pattes)
Level up: 84.5%
 
Posts: 3632
Joined: 13 Dec 2013, 16:35
Gender: Not specified
Calculator(s):
MyCalcs profile

Re: Numworks+Giac

Unread postby parisse » 03 Sep 2017, 18:31

Une autre plus formelle:
Image
User avatar
parisseVIP++
Niveau 12: CP (Calculatrice sur Pattes)
Niveau 12: CP (Calculatrice sur Pattes)
Level up: 84.5%
 
Posts: 3632
Joined: 13 Dec 2013, 16:35
Gender: Not specified
Calculator(s):
MyCalcs profile

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
clifwardMembre UPECS
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Level up: 26.4%
 
Posts: 593
Images: 6
Joined: 20 Sep 2015, 17:50
Gender: Not specified
Calculator(s):
MyCalcs profile
Class: CentraleSupelec

Next

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

Who is online

Users browsing this forum: No registered users and 3 guests

-
Search
-
Social TI-Planet
-
Featured topics
Comparaisons des meilleurs prix pour acheter sa calculatrice !
"1 calculatrice pour tous", le programme solidaire de Texas Instruments. Reçois gratuitement et sans aucune obligation d'achat, 5 calculatrices couleur programmables en Python à donner aux élèves les plus nécessiteux de ton lycée. Tu peux recevoir au choix 5 TI-82 Advanced Edition Python ou bien 5 TI-83 Premium CE Edition Python.
Enseignant(e), reçois gratuitement 1 exemplaire de test de la TI-82 Advanced Edition Python. À demander d'ici le 31 décembre 2024.
Reprise de ton ancienne fx-92 Collège ou Graph 25/35/90 à 3€ peu importe son état. Même non fonctionnelle et donc invendable, même ancienne Graph 35 non conforme aux programmes (pas de Python), même ancienne Graph 25/35 inutilisable aux examens (pas de mode examen) et donc invendable. Etiquette de retour fournie, pas de frais de port à payer.
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
12345
-
Donations / Premium
For more contests, prizes, reviews, helping us pay the server and domains...
Donate
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 Calculatrices à acheter chez Calcuso
-
Stats.
1133 utilisateurs:
>1120 invités
>5 membres
>8 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)