Skip to content
scipython.com

Q10.1.6Boolean operations with floating point numbers

Predict and explain the outcome of the following boolean expressions:

(a) 1e1001 > 1e1000

(b) 1e350/1.e100 == 1e250

(c) 1e250 * 1.e-250 == 1e150 * 1.e-150

(d) 1e350 * 1.e-350 == 1e450 * 1.e-450

(e) 1 / 1e250 == 1e-250

(f) 1 / 1e350 == 1e-350

(g) 1e450/1e350 != 1e450 * 1e-350

(h) 1e250/1e375 == 1e-125

(i) 1e35 / (1e1000 - 1e1000) == 1 / (1e1000 - 1e1000)

(j) 1e1001 > 1e1000 or 1e1001 < 1e1000

(k) 1e1001 > 1e1000 or 1e1001 <= 1e1000

Show solution

With explanations as inline comments to an IPython session:

In [1]: 1e1001 > 1e1000
Out[1]: False       # both values are inf

In [2]: 1e350/1.e100 == 1e250
Out[2]: False       # LHS is inf, RHS is representable

In [3]: 1e250 * 1.e-250 == 1e150 * 1.e-150
Out[3]: True        # both values are equal to 1

In [4]: 1e350 * 1.e-350 == 1e450 * 1.e-450
Out[4]: False       # both sides are inf / 0 which is nan

In [5]: 1 / 1e250 == 1e-250
Out[5]: True        # both sides are representable

In [6]: 1 / 1e350 == 1e-350
Out[6]: True        # both sides equal 0.0 in double precision floating point

In [7]: 1e450/1e350 != 1e450 * 1e-350
Out[7]: True        # both sides are nan, which isn't equal to itself

In [8]: 1e250/1e375 == 1e-125
Out[8]: False       # LHS is 0.0 in floating point, RHS is representable

In [9]: 1e35 / (1e1000 - 1e1000) == 1 / (1e1000 - 1e1000)
Out[9]: False       # inf - inf is nan

In [10]: 1e1001 > 1e1000 or 1e1001 < 1e1000
Out[10]: False      # inf is equal to itself

In [11]: 1e1001 > 1e1000 or 1e1001 <= 1e1000
Out[11]: True      # inf is equal to itself