DIGITS et evalf

Utilisation de Xcas

Modérateur : xcasadmin

Guillaume
Messages : 112
Inscription : sam. janv. 20, 2007 8:48 pm
Contact :

DIGITS et evalf

Message par Guillaume » lun. nov. 03, 2008 9:04 pm

Il semble impossible de fixer DIGITS selon la valeur d'un paramètre à l'inétrieur d'une procédure.

Par exemple,

precision(n):={
DIGITS:=n+1;
evalf(sqrt(2));
}
ne fonctionne pas.

Ne pourrait-on avoir un "evalf(sqrt(2),nb de digits)" ?

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

Message par parisse » mar. nov. 04, 2008 7:26 am

Oui, ca marche déjà, par exemple
evalf(sqrt(2),50)

Guillaume
Messages : 112
Inscription : sam. janv. 20, 2007 8:48 pm
Contact :

Message par Guillaume » mar. nov. 04, 2008 9:49 am

Bonne nouvelle.
Un nouveau problème maintenant avec un test qui ne passe pas.
Voici la mise en route :

Code : Tout sélectionner

f:=x->x^2-2:;p:=20:;u0:=2:;
d:=p+size(string(floor(u0)));
k:=0;
un:=evalf(u0-f(u0)/fp(u0),d); 
Mais ce test ne fonctionne pas :

Code : Tout sélectionner

evalf(abs(-f(un)/fp(un)),d)>=evalf(10^(-p),d);
alors que celui-ci, si :

Code : Tout sélectionner

0.5989427408919430005625e-21>=0.9999999999999999999997e-20

Guillaume
Messages : 112
Inscription : sam. janv. 20, 2007 8:48 pm
Contact :

Message par Guillaume » mar. nov. 04, 2008 10:00 am

Il me semble que ça dépend du réglage d'epsilon.

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

Message par parisse » mar. nov. 04, 2008 12:07 pm

Oui, car le test de 2 nombres voisins de moins de epsilon est considere comme non fiable.
Du coup je viens de corriger un bug dans epsilon qui ne marchait qu'avec un argument de type double precision et pas avec un reel multiprecision.

slejoly
Messages : 194
Inscription : sam. oct. 14, 2006 10:17 am
Localisation : Lorient

Message par slejoly » dim. nov. 16, 2008 8:10 pm

Pour la précision j'en remets une couche : pour evalf(sqrt(2),50) c'est OK, mais si je tape evalf(sqrt(2),5) cela donne 1.41421356237 donc toujours avec DIGITS=12 comme réglé dans la configuration du CAS, la commande ne peut-elle pas prendre le dessus sur la configuration générale ?

Stéphane Lejoly

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

Message par parisse » lun. nov. 17, 2008 9:06 am

On ne peut pas faire descendre la precision des reels en-dessous de 14 chiffres significatifs. La seule chose qu'on peut modifier c'est l'affichage. Donc evalf(...,5) calcule avec 14 chiffres, et ca n'a aucune influence sur le resultat affiche qui depend de Digits. Pour arrondir a 5 chiffres significatifs, il faut actuellement utiliser round. Par exemple round(pi,5).
Je peux peut-etre modifier evalf pour appeler round lorsque le nombre de chiffres est < 14.

Répondre