π
<-
Chat plein-écran
[^]

Numworks+Giac

Numworks+Giac

Message non lude 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: Tout sélectionner
LDFLAGS = -lgiac

Sur Mac, il est peut-etre necessaire de mettre
Code: Tout sélectionner
LDFLAGS = -L/Applications/usr/lib -lgiac

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

par
Code: Tout sélectionner
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: Tout sélectionner
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.
Avatar de l’utilisateur
parisseVIP++
Niveau 12: CP (Calculatrice sur Pattes)
Niveau 12: CP (Calculatrice sur Pattes)
Prochain niv.: 77.2%
 
Messages: 3500
Inscription: 13 Déc 2013, 16:35
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile

Re: Numworks+Giac

Message non lude critor » 03 Sep 2017, 09:42

Bien. :)
Et donc, on a une estimation de la taille nécessaire ?
Image
Avatar de l’utilisateur
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Prochain niv.: 41.8%
 
Messages: 41468
Images: 14480
Inscription: 25 Oct 2008, 00:00
Localisation: Montpellier
Genre: Homme
Calculatrice(s):
MyCalcs profile
YouTube: critor3000
Twitter/X: critor2000
GitHub: critor

Re: Numworks+Giac

Message non lude 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).
Avatar de l’utilisateur
parisseVIP++
Niveau 12: CP (Calculatrice sur Pattes)
Niveau 12: CP (Calculatrice sur Pattes)
Prochain niv.: 77.2%
 
Messages: 3500
Inscription: 13 Déc 2013, 16:35
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile

Re: Numworks+Giac

Message non lude 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: Tout sélectionner
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: Tout sélectionner
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: Tout sélectionner
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: Tout sélectionner
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
}
Avatar de l’utilisateur
parisseVIP++
Niveau 12: CP (Calculatrice sur Pattes)
Niveau 12: CP (Calculatrice sur Pattes)
Prochain niv.: 77.2%
 
Messages: 3500
Inscription: 13 Déc 2013, 16:35
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile

Re: Numworks+Giac

Message non lude Adriweb » 03 Sep 2017, 14:27

On veut des screenshots ! ;)
Image

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...)
Avatar de l’utilisateur
AdriwebAdmin
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Prochain niv.: 80.1%
 
Messages: 14606
Images: 1216
Inscription: 01 Juin 2007, 00:00
Localisation: France
Genre: Homme
Calculatrice(s):
MyCalcs profile
Twitter/X: adriweb
GitHub: adriweb

Re: Numworks+Giac

Message non lude parisse » 03 Sep 2017, 14:34

Comment on fait pour faire une capture de fenetre sur Mac?
Avatar de l’utilisateur
parisseVIP++
Niveau 12: CP (Calculatrice sur Pattes)
Niveau 12: CP (Calculatrice sur Pattes)
Prochain niv.: 77.2%
 
Messages: 3500
Inscription: 13 Déc 2013, 16:35
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile

Re: Numworks+Giac

Message non lude 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.
Image

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...)
Avatar de l’utilisateur
AdriwebAdmin
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Prochain niv.: 80.1%
 
Messages: 14606
Images: 1216
Inscription: 01 Juin 2007, 00:00
Localisation: France
Genre: Homme
Calculatrice(s):
MyCalcs profile
Twitter/X: adriweb
GitHub: adriweb

Re: Numworks+Giac

Message non lude parisse » 03 Sep 2017, 14:41

Voila:
Image
Avatar de l’utilisateur
parisseVIP++
Niveau 12: CP (Calculatrice sur Pattes)
Niveau 12: CP (Calculatrice sur Pattes)
Prochain niv.: 77.2%
 
Messages: 3500
Inscription: 13 Déc 2013, 16:35
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile

Re: Numworks+Giac

Message non lude parisse » 03 Sep 2017, 18:31

Une autre plus formelle:
Image
Avatar de l’utilisateur
parisseVIP++
Niveau 12: CP (Calculatrice sur Pattes)
Niveau 12: CP (Calculatrice sur Pattes)
Prochain niv.: 77.2%
 
Messages: 3500
Inscription: 13 Déc 2013, 16:35
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile

Re: Numworks+Giac

Message non lude clifward » 03 Sep 2017, 18:31

Avoue, tu aimes bien nous faire baver devant quelque chose qui n'arrivera surement jamais... :(
Image
Avatar de l’utilisateur
clifwardMembre UPECS
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Prochain niv.: 26.4%
 
Messages: 593
Images: 6
Inscription: 20 Sep 2015, 17:50
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile
Classe: CentraleSupelec

Suivante

Retourner vers Programmation native (C/C++/...)

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 10 invités

-
Rechercher
-
Social TI-Planet
-
Sujets à la une
Comparaisons des meilleurs prix pour acheter sa calculatrice !
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
Phi NumWorks jailbreak
123
-
Faire un don / Premium
Pour plus de concours, de lots, de tests, nous aider à payer le serveur et les domaines...
Faire un don
Découvrez les avantages d'un compte donateur !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partenaires et pub
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
1076 utilisateurs:
>1054 invités
>18 membres
>4 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)
-
Autres sites intéressants
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)