2015-09-03 2 views
2

Je l'apprentissage de la machine epsilon en simple et double précision et la comparaison des valeurs de différents programmes. Par exemple, dans matlab, le code suivant:Epsilon Machine: MatLab vs Maple

>> format long 
>> eps 

donne 2,220446049250313e-16. Mais le code suivant dans Maple:

> readlib(Maple_floats); 
> evalhf(DBL_EPSILON); 
> quit; 

donne -15 ,2220446049250314 10 (où -15 est exposant).

Il y a une légère différence de sortie entre les deux programmes. Maple semble arrondir de 3 à 4. Quelle est la raison de cette différence?

+1

Dans Maple, 'evalhf (DBL_EPSILON)' 'donne ,222044604925031308 10^-15', qui est le même que' eps' dans Matlab. Alors quel est le problème? –

+0

Quel genre de calcul faites-vous dans lequel 30 + flottant compte vraiment? : ~ – NKN

+0

Il est conçu pour prouver un point sur la machine epsilon, que je ne comprends pas. – BigD4J

Répondre

7

Notez que Maple (et Matlab) vous montrent une représentation radix-10 d'un nombre à virgule flottante double précision du matériel.

donc vous devriez peut-être plus préoccupés par la valeur matérielle double précision sous-jacente.

> restart: 
> kernelopts(version); 

     Maple 2015.0, X86 64 LINUX, Feb 17 2015, Build ID 1022128 

> X:=Vector(1,datatype=float[8]): # double precision container 
> p:=proc(x) x[1]:=DBL_EPSILON; end proc: 
> evalhf(p(X)): 

> lprint(X[1]); 
HFloat(.222044604925031308e-15) 

> printf("%Y\n", X[1]);          
3CB0000000000000 

Ce dernier résultat est « formaté en ordre des octets indépendant format vidage hexadécimal IEEE (largeur de 16 caractères) », selon la documentation. Alors, que vous donne Matlab quand vous printf son eps dans le format équivalent? Une rapide recherche sur le Web semble révéler que cela donnera 3CB0000000000000 à côté de ce 2.220446049250313e-16 que vous avez vu.

En d'autres termes: le matériel double représentation de précision est la même dans les deux systèmes. Ils le représentent différemment dans la base 10. Notez que la valeur base 10 affichée par Maple a 18 décimales. Les chiffres après le 15 sont des artefacts d'une sorte, stockés de sorte qu'en général les numéros stockés en interne peuvent aller-retour correctement pour des conversions répétées dans les deux sens. Notez que la double précision matérielle se rapporte à quelque chose entre 15 et 16 décimales. Ainsi, si vous voulez comparer les deux systèmes, vous pouvez (et devriez probablement) comparer les valeurs de double précision matérielle stockées et non les représentations de base 10 après la 15ème place.