import sys
import math
import ctypes
import struct

sys.float_info

sys.int_info

format(0.125, '.12g')

format(0.101, '.12g')

0.3

0.1

0.1 + 0.1 + 0.1 == 0.3

f"{0x1234:b}"

"""
Explanation: References:
- https://en.wikipedia.org/wiki/IEEE_754
- https://en.wikipedia.org/wiki/Double-precision_floating-point_format
- https://docs.python.org/3/library/functions.html#round
- https://docs.python.org/3/tutorial/floatingpoint.html
- https://docs.python.org/3/library/functions.html#bin
End of explanation
"""


a = 1

"{0:b}".format(a)

"""
Explanation: Binary representation of an integer
With formatting
End of explanation
"""


bin(a)

"""
Explanation: with bin()
End of explanation
"""


sys.float_info

a = 1.0
a

bin(ctypes.c_uint.from_buffer(ctypes.c_float(a)).value)

bin(struct.unpack('!i',struct.pack('!f',a))[0])

a = 2.0
a

bin(ctypes.c_uint.from_buffer(ctypes.c_float(a)).value)

bin(struct.unpack('!i',struct.pack('!f',a))[0])

a = 4.0
a

bin(ctypes.c_uint.from_buffer(ctypes.c_float(a)).value)

bin(struct.unpack('!i',struct.pack('!f',a))[0])

a = 8.0
a

bin(ctypes.c_uint.from_buffer(ctypes.c_float(a)).value)

bin(struct.unpack('!i',struct.pack('!f',a))[0])

a = 2.0**500
a

bin(ctypes.c_uint.from_buffer(ctypes.c_float(a)).value)

bin(struct.unpack('!i',struct.pack('!f',a))[0])

a = -2.0
a

bin(ctypes.c_uint.from_buffer(ctypes.c_float(a)).value)

bin(struct.unpack('!i',struct.pack('!f',a))[0])

"""
Explanation: Binary representation of a float
radix point: the symbol used in numerical representations to separate the integer part of a number (to the left of the radix point) from its fractional part (to the right of the radix point)
Double precision:
- sign (+/-): 1 bit
- exponent: 11 bits
- significand precision: 53 bits (52 explicitly stored)
$e$ biased exponent
$(-1)^{sign} \left( 1.b_{p-1} b_{p-2} ... b_{0} \right)_{2} \cdot 2^{e-1023}$
$(-1)^{sign} \left( 1 + \sum_{i=1}^{p} b_{52-i} 2^{-i} \right) \cdot 2^{e-1023}$
End of explanation
"""


sum([0.1] * 10) == 1.0

math.fsum([0.1] * 10) == 1.0

"""
Explanation: Representation errors
End of explanation
"""


