108 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			108 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
---
 | 
						|
title: Python Floating Point Numbers
 | 
						|
---
 | 
						|
Some general information about floating point numbers and how they work in Python, can be found <a href='https://docs.python.org/3/tutorial/floatingpoint.html' target='_blank' rel='nofollow'>here</a>.
 | 
						|
 | 
						|
Nearly all implementations of Python follow the IEEE 754 specification: Standard for Binary Floating-Point Arithmetic. More information found on the <a href='http://grouper.ieee.org/groups/754/' target='_blank' rel='nofollow'>IEEE site</a>.
 | 
						|
 | 
						|
Float objects can be created using using <a href='https://docs.python.org/3/reference/lexical_analysis.html#floating-point-literals' target='_blank' rel='nofollow'>floating point literals</a>:
 | 
						|
 | 
						|
    >>> 3.14
 | 
						|
    3.14
 | 
						|
    >>> 314\.    # Trailing zero(s) not required.
 | 
						|
    314.0
 | 
						|
    >>> .314    # Leading zero(s) not required.
 | 
						|
    0.314
 | 
						|
    >>> 3e0
 | 
						|
    3.0
 | 
						|
    >>> 3E0     # 'e' or 'E' can be used.
 | 
						|
    3.0
 | 
						|
    >>> 3e1     # Positive value after e moves the decimal to the right.
 | 
						|
    30.0
 | 
						|
    >>> 3e-1    # Negative value after e moves the decimal to the left.
 | 
						|
    0.3
 | 
						|
    >>> 3.14e+2 # '+' not required but can be used for exponent part.
 | 
						|
    314.0
 | 
						|
 | 
						|
Numeric literals do not contain a sign, however creating negative float objects is possible by prefixing with a unary `-` (minus) operator with no space before the literal
 | 
						|
 | 
						|
    >>> -3.141592653589793
 | 
						|
    -3.141592653589793
 | 
						|
    >>> type(-3.141592653589793)
 | 
						|
    <class 'float'>
 | 
						|
 | 
						|
Likewise, positive float objects can be prefixed with a unary `+ (`plus) operator with no space before the literal. Usually `+` is omitted:
 | 
						|
 | 
						|
    >>> +3.141592653589793
 | 
						|
    3.141592653589793
 | 
						|
 | 
						|
Note that leading and trailing zero(s) are valid for floating point literals
 | 
						|
 | 
						|
    >>> 0.0
 | 
						|
    0.0
 | 
						|
    >>> 00.00
 | 
						|
    0.0
 | 
						|
    >>> 00100.00100
 | 
						|
    100.001
 | 
						|
    >>> 001e0010      # Same as 1e10
 | 
						|
    10000000000.0
 | 
						|
 | 
						|
The <a href='https://docs.python.org/3/library/functions.html#float' target='_blank' rel='nofollow'>`float` constructor</a> is another way to create `float` objects.
 | 
						|
 | 
						|
Creating `float` objects with floating point literals is preferred when possible:
 | 
						|
 | 
						|
    >>> a = 3.14         # Prefer floating point literal when possible.
 | 
						|
    >>> type(a)
 | 
						|
    <class 'float'>
 | 
						|
    >>> b = int(3.14)    # Works but unnecessary.
 | 
						|
    >>> type(b)
 | 
						|
    <class 'float'>
 | 
						|
 | 
						|
However, the float constructor allows for creating float objects from other number types:
 | 
						|
 | 
						|
    >>> a = 4
 | 
						|
    >>> type(a)
 | 
						|
    <class 'int'>
 | 
						|
    >>> print(a)
 | 
						|
    4
 | 
						|
    >>> b = float(4)
 | 
						|
    >>> type(b)
 | 
						|
    <class 'float'>
 | 
						|
    >>> print(b)
 | 
						|
    4.0
 | 
						|
    >>> float(400000000000000000000000000000000)
 | 
						|
    4e+32
 | 
						|
    >>> float(.00000000000000000000000000000004)
 | 
						|
    4e-32
 | 
						|
    >>> float(True)
 | 
						|
    1.0
 | 
						|
    >>> float(False)
 | 
						|
    0.0
 | 
						|
 | 
						|
The `float` constructor will also make `float` objects from strings that represent number literals:
 | 
						|
 | 
						|
    >>> float('1')
 | 
						|
    1.0
 | 
						|
    >>> float('.1')
 | 
						|
    0.1
 | 
						|
    >>> float('3.')
 | 
						|
    3.0
 | 
						|
    >>> float('1e-3')
 | 
						|
    0.001
 | 
						|
    >>> float('3.14')
 | 
						|
    3.14
 | 
						|
    >>> float('-.15e-2')
 | 
						|
    -0.0015
 | 
						|
 | 
						|
The `float` constructor can also be used to make numeric representation of `NaN` (Not a Number), negative `infinity` and `infinity` (note strings for these are case insensitive):
 | 
						|
 | 
						|
    >>> float('nan')
 | 
						|
    nan
 | 
						|
    >>> float('inf')
 | 
						|
    inf
 | 
						|
    >>> float('-inf')
 | 
						|
    -inf
 | 
						|
    >>> float('infinity')
 | 
						|
    inf
 | 
						|
    >>> float('-infinity')
 | 
						|
    -inf |