The significance of significant digits

As illustrated in the xx file, besides typical linguistic hedges (i.e. “about 7”) which indicate uncertainty, the number (i.e. 7 or 7.0) per se indicate uncertainty as well. Significant digits are established ways among engineers to indicate how precise they can be about the measurements. With the concept of uncertain number, pyuncertainnumber facilitates the expression of such significance in computations.

import pyuncertainnumber as pun
from pyuncertainnumber.characterisation.utils import sgnumber
print("\n\nInterpreting significant digits")

def unumber(s):
    return pun.I(s).intervals

def outs(s):
    return "{:>10}\t".format(s)

s = "200.000"
print(outs(s), sgnumber(s))  # [ 199.9995, 200.0005]
s = "200.00"
print(outs(s), sgnumber(s))  # [ 199.995, 200.005]
s = "200.0"
print(outs(s), sgnumber(s))  # [ 199.95, 200.05]
s = "200."
print(outs(s), sgnumber(s))  # [ 199.5, 200.5]
s = "20.e1"
print(outs(s), sgnumber(s))  # [ 195, 205]
s = "1.23"
print(outs(s), sgnumber(s))  # 1.225, 1.235  # the extra nines are a 'feature' of Python
s = "1.2300"
print(outs(s), sgnumber(s))  # 1.22995, 1.23005
s = "12.3"
print(outs(s), sgnumber(s))  # 12.25, 12.35
s = "1.23e8"
print(outs(s), sgnumber(s))  # 122500000.0, 123500000.0
s = "12.3e2"
print(outs(s), sgnumber(s))  # 1225.0, 1235.0
s = "12.3e-4"
print(outs(s), sgnumber(s))  # 0.001225, 0.001235
s = "12300"
print(outs(s), sgnumber(s))  # 12250.0, 12350.0
s = "12300e4"
print(outs(s), sgnumber(s))  # 122500000.0, 123500000.0
s = "9"
print(outs(s), sgnumber(s))  # 8.5,9.5
s = "2e2"
print(outs(s), sgnumber(s))  # 150, 250
s = "200"
print(outs(s), sgnumber(s))  # 150,250
s = "10"
print(outs(s), sgnumber(s))  # 5,15
s = "1000"
print(outs(s), sgnumber(s))  # 500,1500
s = "1000000"
print(outs(s), sgnumber(s))  # 5e5,15e5
s = "123400"
print(outs(s), sgnumber(s))  # 123350,123450
s = "12000"
print(outs(s), sgnumber(s))  # 11500,12500
Interpreting significant digits
   200.000	 [199.9995, 200.0005]
    200.00	 [199.995, 200.005]
     200.0	 [199.95, 200.05]
      200.	 [199.5, 200.5]
     20.e1	 [195.0, 205.0]
      1.23	 [1.225, 1.2349999999999999]
    1.2300	 [1.2299499999999999, 1.23005]
      12.3	 [12.25, 12.350000000000001]
    1.23e8	 [122500000.0, 123500000.0]
    12.3e2	 [1225.0, 1235.0]
   12.3e-4	 [0.001225, 0.001235]
     12300	 [12250.0, 12350.0]
   12300e4	 [122500000.0, 123500000.0]
         9	 [8.5, 9.5]
       2e2	 [150.0, 250.0]
       200	 [150.0, 250.0]
        10	 [5.0, 15.0]
      1000	 [500.0, 1500.0]
   1000000	 [500000.0, 1500000.0]
    123400	 [123350.0, 123450.0]
     12000	 [11500.0, 12500.0]