>>> # 2022-12-27: >>> # illustrating the limit of 64-bit floating point numbers' subnormal precision. >>> # 2^(-1022) is the smallest number that can be represented as a normal floating point number, >>> # while numbers below that are in the subnormal region. >>> for i in range(1020, 1077): ... print(f"1 / 2**{i}: {1 / 2**i}") ... 1 / 2**1020: 8.900295434028806e-308 1 / 2**1021: 4.450147717014403e-308 1 / 2**1022: 2.2250738585072014e-308 1 / 2**1023: 1.1125369292536007e-308 1 / 2**1024: 5.562684646268003e-309 1 / 2**1025: 2.781342323134e-309 1 / 2**1026: 1.390671161567e-309 1 / 2**1027: 6.953355807835e-310 1 / 2**1028: 3.4766779039175e-310 1 / 2**1029: 1.73833895195875e-310 1 / 2**1030: 8.691694759794e-311 1 / 2**1031: 4.345847379897e-311 1 / 2**1032: 2.1729236899484e-311 1 / 2**1033: 1.086461844974e-311 1 / 2**1034: 5.43230922487e-312 1 / 2**1035: 2.716154612436e-312 1 / 2**1036: 1.35807730622e-312 1 / 2**1037: 6.7903865311e-313 1 / 2**1038: 3.39519326554e-313 1 / 2**1039: 1.69759663277e-313 1 / 2**1040: 8.487983164e-314 1 / 2**1041: 4.243991582e-314 1 / 2**1042: 2.121995791e-314 1 / 2**1043: 1.0609978955e-314 1 / 2**1044: 5.304989477e-315 1 / 2**1045: 2.65249474e-315 1 / 2**1046: 1.32624737e-315 1 / 2**1047: 6.63123685e-316 1 / 2**1048: 3.3156184e-316 1 / 2**1049: 1.6578092e-316 1 / 2**1050: 8.289046e-317 1 / 2**1051: 4.144523e-317 1 / 2**1052: 2.0722615e-317 1 / 2**1053: 1.036131e-317 1 / 2**1054: 5.180654e-318 1 / 2**1055: 2.590327e-318 1 / 2**1056: 1.295163e-318 1 / 2**1057: 6.4758e-319 1 / 2**1058: 3.2379e-319 1 / 2**1059: 1.61895e-319 1 / 2**1060: 8.095e-320 1 / 2**1061: 4.0474e-320 1 / 2**1062: 2.0237e-320 1 / 2**1063: 1.012e-320 1 / 2**1064: 5.06e-321 1 / 2**1065: 2.53e-321 1 / 2**1066: 1.265e-321 1 / 2**1067: 6.3e-322 1 / 2**1068: 3.16e-322 1 / 2**1069: 1.6e-322 1 / 2**1070: 8e-323 1 / 2**1071: 4e-323 1 / 2**1072: 2e-323 1 / 2**1073: 1e-323 1 / 2**1074: 5e-324 1 / 2**1075: 0.0 1 / 2**1076: 0.0 >>>