How do you compute the midpoint of an interval? (2014) [pdf]
hal.archives-ouvertes.fr
hal.archives-ouvertes.fr
0 if a == –b
±realmax if a or b is ±∞
otherwise compute (a - a/2) + b/2 at higher precision, then round to the nearest float
That, IMO, is debatable. NaN is an option, too (as it is for the case a=+∞, b=-∞, so one can argue ”0 if a == –b” needs tuning, too)
Both choices break the property m(I) ∈ I, but that may be fine, as NaN doesn’t mean the midpoint isn’t in the interval, but just that one cannot tell where in the interval it lies.
In “mathematics”, the meaning of the symbol ∞ depends on what number system we are talking about. In some contexts ∞ is not a “number”, but rather a shorthand for a statement about limits. In other contexts it is a number.
If you want to learn about the “affinely extended real numbers”, which is what floating point numbers more or less approximate, you can read https://en.wikipedia.org/wiki/Extended_real_number_line
In C and C++ (where you don't have the >>> operator), you can do this:
6: mid = ((unsigned int)low + (unsigned int)high)) >> 1;
Since you're casting to unsigned int anyway, can't you just use / 2?I would go so far as to say that using floating point in any software that might cause the rocket to blow up is probably Doing It Wrong (TM). That does not include the video encoder sending a livestream to the ground station, but it does include the µC that controls the engine turbopumps.
This went wrong before and an Ariane 5 was blown up (automatically as a safety measure), see https://en.wikipedia.org/wiki/Cluster_(spacecraft)#Launch_fa... Strictly speaking the problem was converting floats to 16-bit integers which ended in an overflow... So avoiding floats doesn't even help as it won't protect you from overflows.