# Number Literal Semantics¶

This section describes the meaning of number literal forms, as distinct from their syntax.

## Approximate Numbers (`Real`

)¶

### When a Number Literal is`Real`

¶

A number literal representation will be interpreted as a real number if and only if any of the following are true:

- There is a point
`.`

in the mantissa, as in`3.2`

. - The precision pseudo-operator
```

appears in the number literal, regardless of whether or not a numerical precision is given. - The accuracy pseudo-operator
````

appears in the number literal.

Note that a real number cannot be produced by virtue of the use of the scientific form pseudo-operator `*^`

. See Scientific Form below.

### Precision and Accuracy¶

A `Real`

number is not a real number in the mathematical sense. Rather, a `Real`

number is what is called a *floating point* number in other languages. The precision and accuracy of a `Real`

number are functionally equivalent notions that can be understood as follows. Suppose \(x\) is a `Real`

number which represents a real number \(\hat{x}\in\mathbb{R}\) up to an error of \(\delta_x\), that is, the *true value* \(\hat{x}\) of the number represented by \(x\) lies in the interval \((x - \delta_x/2, x + \delta_x/2)\).

- If a
`Real`

number \(x\) has \(p\) digits in base \(b\) of, then \(\delta_x = |x|b^{-p}\).*precision* - Likewise, if a
`Real`

number \(x\) has\(a\) in base \(b\), then \(\delta_x = b^{-a}\).*accuracy*

It is clear from the above that precision depends on the magnitude of the number \(x\), while accuracy does not. Indeed, we have \(p = a + \log_{b}|x|\).

If the precision (or accuracy) of a number literal given with explicit base \(b\) is provided, then that precision (repectively accuracy) is interpreted to be the number of *digits in the given base* \(b\) of precision (respectively accuracy).

A number written without an explicit base has base \(10\). Therefore, whenever a number literal is written without `^^`

, the exponent represents *decimal* digits of precision/accuracy, that is, the number of digits in base \(10\).

Tip

The number of digits of precision/accuracy in base \(10\) is only approximate in general on a digital computer. This is why most other numerical computing systems *only* use base 2 corresponding to *bits* of precision/accuracy. If we desire \(b\) bits of accuracy, then we need \(b/\log_2(10)\) decimal digits of accuracy. Said another way, every decimal digit of accuracy requires \(\log_2(10) \approx 3.32193\) bits of accuracy.

Compatibility Warning

Syntactically, only undecorated decimal numbers can follow the `*^`

pseudo-operator, which is inconvenient if one wishes to represent a number in base \(10\) (or other nonbinary bases) having a precise number of bits of precision/accuracy.

A number decorated with the precision pseudo-operator ```

that is not immediately followed by an explicit precision is interpreted as having `$MachinePrecision`

, regardless of whether or not a point `.`

appears in the mantissa, and regardless of how many digits are given explicitly in the number's representation.

Info

Mathematica defines a `$MachinePrecision`

`Real`

number as a double precision floating point number ("double") as defined by the host platform. On systems with 64-bit IEEE doubles, the IEEE standard reserves 53 bits to the mantissa, which is 53 bits of accuracy or about 15.9546 decimal digits of accuracy.

## Scientific Form¶

The pseudo-operator `*^`

multiplies the given digits by a power of the base. For a number literal of the form `b^^m*^p`

with base `b`

, mantissa `m`

, and power `p`

(which must be an integer), `*^p`

has the effect of multiplying `b^^m`

by `b^p`

(`b`

raised to the `p`

power). If an explicit base is not given using `^^`

, then the base is \(10\) and `*^p`

has the effect of multiplying the number by `10^p`

.

The type of the number literal is determined according to the following rules:

- If the number would be an
`Integer`

without the exponent`*^p`

, then the number with the exponent`*^p`

is either an`Integer`

or a`Rational`

according to whether the number is divisible by`b^p`

. - If the number would be a
`Real`

number without the exponent`*^p`

, then the number with the exponent is a`Real`

number.

The pseudo-operator `*^`

has no effect on the accuracy of a number literal.