Numbers
=======
Python’s four number types are integers, floating point numbers, complex numbers
and Boolean numbers:
+-----------------------+-----------------------------------------------+
| Type | Examples |
+=======================+===============================================+
| Integers | ``-1``, ``42``, ``90000000`` |
+-----------------------+-----------------------------------------------+
| Floats | ``90000000.0``, ``-0.005``, ``9e7``, ``-5e-3``|
+-----------------------+-----------------------------------------------+
| Complex numbers | ``3 + 2j``, ``-4- 2j``, ``4.2 + 6.3j`` |
+-----------------------+-----------------------------------------------+
| Boolean numbers | ``True``, ``False`` |
+-----------------------+-----------------------------------------------+
They can be manipulated with the arithmetic operators:
+-----------------------+-----------------------------------------------+
| Operator | Description |
+=======================+===============================================+
| ``+`` | Addition |
+-----------------------+-----------------------------------------------+
| ``-`` | Subtraction |
+-----------------------+-----------------------------------------------+
| ``*`` | Multiplication |
+-----------------------+-----------------------------------------------+
| ``/``, ``//`` | Division [#]_ |
+-----------------------+-----------------------------------------------+
| ``**`` | Exponentiation |
+-----------------------+-----------------------------------------------+
| ``%`` | Modulus |
+-----------------------+-----------------------------------------------+
.. [#] Dividing integers with ``/`` results in a float, and dividing integers
with ``//`` results in an integer that is truncated.
.. note::
Integers can be unlimited in size, limited only by the available memory.
Examples:
.. code-block:: pycon
>>> 8 + 3 - 5 * 3
-4
>>> 8 / 3
2.6666666666666665
>>> 8 // 3
2
>>> x = 4.2**3.4
>>> x
131.53689544409096
>>> 9e7 * -5e-3
-450000.0
>>> -(5e-3**3)
-1.2500000000000002e-07
.. seealso::
* Julia Evans: `Examples of floating point problems
`_
* David Goldberg: `What Every Computer Scientist Should Know About
Floating-Point Arithmetic
`_
.. toctree::
:titlesonly:
:hidden:
complex
bool
Built-in numerical functions
----------------------------
Several built-in functions can work with numbers:
:func:`python3:abs`
returns the absolute value of a number. Here, as argument can be an integer,
a floating point number or an object that implements ``__abs__()``. With
complex numbers as arguments, their absolute value is returned.
:func:`python3:divmod`
takes two (non-complex) numbers as arguments and returns a pair of numbers
consisting of their quotient and the remainder if integer division is used.
:class:`python3:float`
returns a floating point number formed from a number or string ``x``.
:func:`python3:hex`
converts an integer number to a lowercase hexadecimal string with the
prefix ``0x``.
:class:`python3:int`
returns an integer object constructed from a number or string ``x``, or
``0`` if no arguments are given.
:func:`python3:max`
returns the largest element in an :term:`python3:iterable` or the largest of
two or more arguments.
:func:`python3:min`
returns the smallest element in an iterable or the smallest of two or more
arguments.
:func:`python3:oct`
converts an integer number to an octal string with the prefix ``0o``. The
result is a valid Python expression. If ``x`` is not a Python :func:`int`
object, it must define an ``__index__()`` method that returns an integer.
:func:`python3:pow`
returns *base* as a power of *exp*.
:func:`python3:round`
returns a number rounded to *ndigits* after the decimal point. If *ndigits*
is omitted or is *None*, the nearest integer to the input is returned.
Advanced numerical functions
----------------------------
More advanced numerical functions such as trigonometry, as well as some useful
variables, are not built into Python, but are provided in a standard module
called :doc:`math `. :doc:`Module ` will
be explained in more detail later. For now, suffice it to say that you need to
make the maths functions available in this section by importing ``math``:
.. code-block:: python
import math
Built-in functions are always available and are called using standard function
call syntax. In the following code, ``round`` is called with a float as the
input argument.
.. code-block:: pycon
>>> round(2.5)
2
With ``ceil`` from the standard library ``math`` and the attribute notation
:samp:`MODULE.FUNCTION(ARGUMENT)` is rounded up:
.. code-block:: pycon
>>> math.ceil(2.5)
3
The ``math`` module provides, among other things
* the number theoretic and representation functions :func:`python3:math.ceil`,
:func:`python3:math.modf`, :func:`python3:math.frexp` and
:func:`python3:math.ldexp`,
* the power and logarithmic functions :func:`python3:math.exp`,
:func:`python3:math.log`, :func:`python3:math.log10`, :func:`python3:math.pow`
and :func:`python3:math.sqrt`,
* the trigonometric functions :func:`python3:math.acos`,
:func:`python3:math.asin`, :func:`python3:math.atan`,
:func:`python3:math.atan2`, :func:`python3:math.ceil`,
:func:`python3:math.cos`, :func:`python3:math.hypot` and
:func:`python3:math.sin`,
* the hyperbolic functions :func:`python3:math.cosh`,
:func:`python3:math.sinh` and :func:`python3:math.tanh`
* and the variables :data:`python3:math.e` and :data:`python3:math.pi`.
Rounding half to even
---------------------
Python typically performs floating-point calculations in base 2, whereby numbers
in the middle are rounded down in half the cases and rounded up in the other
half, in order to prevent statistical drift during lengthy calculations.
However, the :class:`Decimal ` class also allows
calculations to be performed in base 10. For commercial rounding,
:data:`ROUND_HALF_UP ` from the Decimal class
is also required for `rounding half up
`_:
.. code-block:: pycon
>>> import decimal
>>> num = decimal.Decimal("2.5")
>>> rounded = num.quantize(decimal.Decimal("0"), rounding=decimal.ROUND_HALF_UP)
>>> rounded
Decimal('3')
.. seealso::
* `IEEE 754 `_
Built-in modules for numbers
----------------------------
The Python standard library contains a number of built-in modules that you can
use to manage numbers:
.. _number-modules:
+-----------------------+-------------------------------------------------------------------------------+
| Module | Description |
+=======================+===============================================================================+
| :py:mod:`numbers` | for numeric abstract base classes |
+-----------------------+-------------------------------------------------------------------------------+
| :py:mod:`math`, | for mathematical functions for real and complex numbers |
| :py:mod:`cmath` | |
+-----------------------+-------------------------------------------------------------------------------+
| :py:mod:`decimal` | for decimal fixed-point and floating-point arithmetic |
+-----------------------+-------------------------------------------------------------------------------+
| :py:mod:`statistics` | for functions for calculating mathematical statistics |
+-----------------------+-------------------------------------------------------------------------------+
| :py:mod:`fractions` | for rational numbers |
+-----------------------+-------------------------------------------------------------------------------+
| :py:mod:`random` | for generating pseudo-random numbers and selections and for shuffling |
| | sequences |
+-----------------------+-------------------------------------------------------------------------------+
| :py:mod:`itertools` | for functions that create iterators for efficient loops |
+-----------------------+-------------------------------------------------------------------------------+
| :py:mod:`functools` | for higher-order functions and operations on callable objects |
+-----------------------+-------------------------------------------------------------------------------+
| :py:mod:`operator` | for standard operators as functions |
+-----------------------+-------------------------------------------------------------------------------+
.. _end-number-modules:
.. seealso::
* :doc:`Python4DataScience:workspace/numpy/index`
Checks
------
* Create some number variables (integers, floating point numbers and complex
numbers). Experiment a little with what happens when you perform operations
with them, even across types.