IEEE 754 is incredibly consistent with mathematics. The easiest way to determine if a float operation would return inf, -inf, or NaN is to quite literally make an expression and take the limit of it as a certain variable approaches infinity. 0/0, inf/inf, 0*inf, inf-inf are standard Indeterminant Forms (IDF). If you are taking a limit, and come across this the general procedural to algebraically manipulate to remove the IDF, or apply L'Hospital. If after those attempts, you are still an IDF then that's that. In IEEE 754, an IDF is represented as a NaN. There are some special cases, wiki would describe 0^0 1^inf and infinity^0 as IDF through certain manipulations. However, I think most people would argue otherwise and IEEE 754 handles them accordingly, which actually evaluates them (or maybe its language specific, both Matlab and Numpy return 1, 1, and 1 respectively which is correct to me). Limits that turn into infinity are quite literally represented by infinity in IEEE 754. So limit 1/x as x -> 0 is infinity. 1/x as x -> infinity is zero or as close to zero as IEEE 754 allows. Very interesting example is log(0) log(x) as x->0 = -inf Which mathematically makes sense. As log(x) is asking e raised to what value a produces x. In other words, e^(a) = x or e^(a) = 0 Well the easiest thing to do is choose a << 0 i.e. 1/e^(a) and what would bring that to 0? making a sufficiently large hence -inf Base python should be consistent with IEEE 754 in my opinion.