Un programme qui plante

Bugs

Modérateur : xcasadmin

alb
Messages : 1320
Inscription : ven. août 28, 2009 3:34 pm

Un programme qui plante

Message par alb » lun. déc. 12, 2011 8:25 pm

J'ai un programme qui plante depuis ce soir avec la maj de la version en test. Le voici:

Code : Tout sélectionner

enlabs(E):={
//E=cste ou cste*abs(binôme) par ex -3 ou 5*i*abs(x+1)/4
local temp,sol,a;
sol:=solve(E);
si sol==[] ou sol==[x] alors
  retourne E
sinon
  a:=sol[0];
  supposons(x>a);
  temp:=eval(E);
  purge(x);
  retourne temp;//-3 ou 5*i*(x+1)/2
fsi;
}
:;
Ferrari(P):={//P polynôme de degré 4
local E,P2,u,F,L,delta,sol,k,v,S,E1,E2,T,a;
//E sous forme x^4+ax^2+bx+c
E:=normal(normal(subst(P,x=x-coeff(P,x,3)/(4*coeff(P,x,4))))/coeff(P,x,4));
P2:=poly2symb(tail(tail(coeff(-E))));
purge(u);
F:=op(reorder((x^2+u)^2,[x,u]));
F[0]:=P2;
F:=sum(F);
L:=coeff(F,x);
delta:=L[1]^2-4*L[0]*L[2];//polynôme de degré 3 en u
sol:=solve(delta,u);
afficher(sol);
//tester si sol contient un rationnel
si a:=member(DOM_RAT,apply(x->type(x),sol)) alors
  v:=sol[a-1];
sinon
  si a:=member(DOM_INT,apply(x->type(x),sol)) alors
  v:=sol[a-1];
  sinon
    retourne round(csolve(P),4);
  fsi;
fsi;
S:=evalc(sqrt(factor(subst(F,u=v))));
afficher(factor(subst(F,u=v)));//cste*(binôme)^2 ou cste
afficher(S);//avec valeur absolue éventuelle
S:=enlabs(S);//sans valeur absolue
afficher(S);//pour vérifier que S est sans valeur absolue
E1:=subst(x^2+u,u=v)-S;
E2:=subst(x^2+u,u=v)+S;
afficher(E1);afficher(E2);//pour vérifier les équations
retourne apply(t->t-coeff(P,x,3)/(4*coeff(P,x,4)),csolve(E1) union csolve(E2));//ne pas simplifier
//si nécessaire faire simplifier(ans()) ou evalc(ans()) dans le niveau du dessous
}
Si je fais
Ferrari(x^4-159x^2+840x-588)
j'obtiens en bleu x:recursive definition et le programme plante
Hier soir le programme renvoyait encore l'expression exacte des 4 solutions
J'ai lu quelque part qu'on pouvait lancer xcas à partir de gdb puis obtenir le backtrace
Malheureusement je suis bien incapable d'aller plus loin
Le bug vient vraisemblablement de mon programme mais comme c'est nouveau et que je n'ai pas le temps de le reprendre je vous le soumets

Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0xb7374b70 (LWP 2732)]
0x00389002 in giac_yylex(giac::gen*, void*) () from /usr/lib/libgiac.so.0
(gdb) bt
#0 0x00389002 in giac_yylex(giac::gen*, void*) () from /usr/lib/libgiac.so.0
#1 0x0060e8cc in giac::giac_yyparse(void*) () from /usr/lib/libgiac.so.0
#2 0x00bc8fd8 in ?? () from /usr/lib/libgiac.so.0
#3 0x00bca1b1 in giac::gen::gen(std::string const&, giac::context const*) ()
from /usr/lib/libgiac.so.0
#4 0x008a0dd7 in giac::ifactors(giac::gen const&) ()
from /usr/lib/libgiac.so.0
#5 0x00b04378 in giac::zint2simpldoublpos(giac::gen const&, giac::gen&, giac::gen&, bool&, giac::context const*) () from /usr/lib/libgiac.so.0
#6 0x003b62d9 in ?? () from /usr/lib/libgiac.so.0
#7 0x003a96aa in giac::sym2r(giac::gen const&, giac::dbgprint_vector<giac::gen> const&, giac::dbgprint_vector<giac::gen> const&, giac::dbgprint_vector<giac::gen> const&, giac::dbgprint_vector<giac::gen> const&, int, giac::gen&, giac::gen&, giac::context const*) () from /usr/lib/libgiac.so.0
#8 0x003aae24 in ?? () from /usr/lib/libgiac.so.0
#9 0x003ac38d in giac::sym2r(giac::gen const&, giac::dbgprint_vector<giac::gen> const&, int, giac::gen&, giac::gen&, giac::context const*) ()
from /usr/lib/libgiac.so.0
#10 0x003accdc in giac::sym2r(giac::gen const&, giac::dbgprint_vector<giac::gen> const&, giac::context const*) () from /usr/lib/libgiac.so.0
#11 0x003aceac in giac::e2r(giac::gen const&, giac::dbgprint_vector<giac::gen> const&, giac::context const*) () from /usr/lib/libgiac.so.0
#12 0x003bfa7c in giac::normal(giac::gen const&, bool, giac::context const*) ()

parisse
Messages : 5734
Inscription : mar. déc. 20, 2005 4:02 pm
Contact :

Re: Un programme qui plante

Message par parisse » mar. déc. 13, 2011 10:20 am

en effet, c'est un effet de bord de la modification que j'ai faite dans solve pour resoudre directement les equations du 1er degre. Comme quoi, une modification qui parait mineure peut avoir des consequences inattendues!
Correction faite, les mises a jour vont suivre...

alb
Messages : 1320
Inscription : ven. août 28, 2009 3:34 pm

Re: Un programme qui plante

Message par alb » mar. déc. 13, 2011 8:46 pm

Tout est rentré dans l'ordre. Merci !

Répondre