The default value of
$NumberMarks
Automatic
means that ` should by default be used in arbitrary-precision but not machine-precision numbers. Arbitrary-precision numbers can contain an arbitrary number of digits e.g. :
Sqrt[3`21] == 1.73205080756887729353
Machine numbers contain the same number of digits and maintain no information on their precision, e.g. :
{Sqrt[3`10] == Sqrt[3] // N, Sqrt[3`10]}
{True, 1.7320508076}
One can force machine numbers to be shown with number marks by :
Block[{$NumberMarks = True}, ToString[N[1/3], InputForm]]
0.3333333333333333`
Precision[x]
yields the effective number of digits of precision in the number x
.
Precision /@ {1/3, 1/3 // N}
Precision[1/3 // N] // N
15.9546
Round[MachinePrecision]
16
You can count the number of digits before the backtick, namely 16
.
The MachinePrecission
is a real number because on the hardware level it is represented in the binary form. This needs 53
bits to represent almost 16
digits :
N@{MachinePrecision*Log[2, 10], MachinePrecision}
{53., 15.9546}
Developer`PartitionMap
$\endgroup$