Floating-Point Arithmetic

There are three levels of precision (see the Fig. 2.4)
Figure 2.4: Level of precision.
Image 0-29
 
week3_HandsOn.py
    1 import sys
    2 print(sys.float_info)
    3 # sys.float_info(max=1.7976931348623157e+308, max_exp=1024, max_10_exp=308, min=2.2250738585072014e-308, min_exp=-1021,
    4 # min_10_exp=-307, dig=15, mant_dig=53, epsilon=2.220446049250313e-16, radix=2, rounds=1)
    5 print(sys.float_info.max)
    6 # 1.7976931348623157e+308
    7 print("%10.6e " % 2**128)
    8 # 3.402824e+38
    9 print("%10.6e " % 2**1023)
   10 # 8.988466e+307f
EPS: short for epsilon $\longrightarrow$used for represent the smallest machine value that can be added to 1.0 that gives a result distinguishable from 1.0! $eps\longrightarrow\varepsilon\Longrightarrow(1+\varepsilon)+\varepsilon=1~but~1+(\varepsilon+\varepsilon)>1$ Two numbers that are very close together on the real number line can not be distinguished on the floating-point number line if their difference is less than the least significant bit of their mantissas.
 
    1 import sys
    2 print(sys.float_info.epsilon)
    3 # 2.220446049250313e-16
    4 eps=sys.float_info.epsilon
    5 print(1+eps*0.5)
    6 # 1.0
    7 print(1+eps*0.5)
    8 # 1.0
    9 print((1+eps*0.5)+eps*0.5)
   10 # 1.0
   11 print(1+eps*0.6)
   12 # 1.0000000000000002