test

Utilisation de Xcas

Modérateur : xcasadmin

jmmeny
Messages : 36
Inscription : dim. févr. 03, 2008 8:41 pm

test

Message par jmmeny » mar. avr. 14, 2009 8:43 am

Bonjour

Petite fonction :
encadre(x,ordre):={
local k;
k:=0;
while(k*k<x){k:=k+ordre;};
if (k*k==x) return k;else return [k-ordre,k];
}
:;


pour encadre(50^2,0.1) j'obtiens [49.9,50]

pour encadre(50^2,0.01) j'obtiens [50,50.01]

j'aimerais comprendre pourquoi on n'obtient pas seulement 50 (une question de flottant ou pas ?)
et pourquoi dans le cas 2, 50 est la borne de gauche ?

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

Message par parisse » mar. avr. 14, 2009 2:17 pm

Il s'agit d'un effet de la représentation des flottants en base 2. Xcas utilise les flottants machines avec 52+1 bits de mantisse (pour les futures versions 0.9.x ce sera très probablement 45 bits) et 11 bits d'exposant. La représentation de 0.1 ou de 0.01 n'est pas exacte en base 2 (de même que 1/3 n'est pas représentable exactement en base 10) et les erreurs d'arrondi provoquent ce genre de petite surprise, comme par exemple le fait que 0.3-3*0.1 ne fait pas 0.0. Vous pouvez trouver quelques infos complémentaires par exemple sur mon cours de mat249. Je n'ai pas fait l'exercice qui consiste à comprendre pourquoi avec 0.01 et 0.1 l'arrondi fait changer l'encadrement, il faudrait écrire précisément en base 2 les nombres qui interviennent et les opérations avec arrondi. Il est possible que le résultat soit différent en travaillant avec des flottants longs (Digits:=16 ou plus).

Répondre