I was trying to convert some arbitrary-precision numbers to machine-precision numbers using N[myNumber,MachinePrecision]
. But, although my test number did lose some precision, it still had a very strange exponent:
number = 5.803736411761291186334053015446685`16*^-400;
number1 = SetPrecision[number, MachinePrecision]
5.803736411761291×10^-400
As $10^{-400}$ is not representable in IEEE 754 binary64
, and I'm on x86 where this format is native, I tried checking what precision the number has, and it appears
Precision@number1
15.954589770191
This might be OK if truly machine-precision numbers gave the same, but they don't:
[email protected]
MachinePrecision
Finally, I've checked my number given by SetPrecision
using FullForm
:
FullForm@number1
5.803736411761291186334053015446685`15.954589770191005*^-400
So, apparently, SetPrecision
won't give me machine number. How then do I convert my arbitrary-precision number to machine number? (I'd expect the $~10^{-400}$ value to be rounded down to machine zero.)
N[number]
?? From Documentation Center page "MachinePrecision": "MachinePrecision is the symbol representing the number of decimal digits used by numerical functions such as N, NIntegrate, and NSum in the Wolfram Language for machine-precision computations." $\endgroup$SetPrecision[number,MachinePrecision]
. $\endgroup$