▲ | thwarted 3 days ago | ||||||||||||||||
You still can't divide by zero, it just doesn't result in an error state that stops execution. The inf and NaN values are sentinel values that you still have to check for after the calculation to know if it went awry. | |||||||||||||||||
▲ | sixo 3 days ago | parent | next [-] | ||||||||||||||||
In the space of floats, you are dividing by zero. To map back to the space of numbers you have to check. It's nice, though; inf and NaN sentinels give you the behavior of a monadic `Result | Error` pipeline without having to wrap your numbers in another abstraction. | |||||||||||||||||
▲ | epcoa 3 days ago | parent | prev | next [-] | ||||||||||||||||
If dividing by zero has a well defined result that doesn’t abort execution what exactly does “can’t” even mean? Operations on those sentinel values are also defined. This can affect when checking needs to be done in optimized code. | |||||||||||||||||
| |||||||||||||||||
▲ | exDM69 2 days ago | parent | prev | next [-] | ||||||||||||||||
It's not always necessary to check for inf/NaN explicitly using isinf/isnan. Both inf and NaN are floating point values with well defined semantics. I'll give two examples from a recent project where I very intentionally divided by zero. First one was about solving a zero in a derivative and check if it falls on 0..1 range. This exploits the fact that (x < NaN) is always false and comparisons with +/- inf behave as expected.
The second one was similar, but clamping to 0..1 range using branchless simd min/max.
In both of these cases, explicitly checking for division by zero or isinf/isnan would've been (worse than) useless because just using the inf/NaN values gave the correct answer for what comes next. | |||||||||||||||||
▲ | mike_ivanov 3 days ago | parent | prev | next [-] | ||||||||||||||||
This is the Result monad in practice. It allows you to postpone error handling until the computation is done. | |||||||||||||||||
▲ | wpollock 2 days ago | parent | prev | next [-] | ||||||||||||||||
It has always amused me that Integer division by 0 results in "floating point exception", but floating point division by 0.0 doesn't! | |||||||||||||||||
▲ | TehShrike 3 days ago | parent | prev [-] | ||||||||||||||||
You can divide by zero, but you mayn't. |