hier hat sich in Version 5 still und heimlich einiges geändert.
> bekanntlich sei:
" N[expr] is equivalent to N[expr, MachinePrecision] "
das ist zwar richtig, aber MachinePrecision ist nicht das selbe
wie $MachinePrecision.
In[1]:= N[ -4054053982264 + 864327213163 Sqrt[22] ]
Out[1]= 0.
In[2]:= N[ -4054053982264 + 864327213163 Sqrt[22], MachinePrecision]
Out[2]= 0.
$MachinePrecision (das eigentlich nur noch aus Rückwärtskompatbilität
existiert), ist ganz einfach eine Zahl, und neu ist
N[ expr, Zahl ]
auf *jeden Fall* eine Rechnung in Software-Arithmetik (variable Genauigkeit),
so dass sogar mit einem Wert kleiner als 15.95 das richtige Resultat heraus
kommt:
In[3]:= N[ -4054053982264 + 864327213163 Sqrt[22], $MachinePrecision]
-6
Out[3]= 7.850761519022960 10
In[4]:= N[ -4054053982264 + 864327213163 Sqrt[22], 6]
-6
Out[4]= 7.85076 10
Früher wurde N[expr, 6] empfohlen, um die Ausgabe auf 6 Stellen zu
beschränken. Das geht jetzt nicht mehr, denn es führt dazu, das die
Rechnung in Softwarearithmetik durchgeführt wird, also langsamer ist,
als N[expr].
Die Konstante MachinePrecision wird wie andere (Pi, E) auch nicht
automatisch auf eine Zahl reduziert. Sie ist ein Signal an N[], dass
mit Maschinengenauigkeit gerechnet werden soll.
In[9]:= Precision[1.0]
Out[9]= MachinePrecision
In[10]:= Precision[%4]
Out[10]= 6.
Roman Mäder