| |
| Posted by Ola Fosheim Grøstad in reply to Ola Fosheim Grøstad | PermalinkReply |
|
Ola Fosheim Grøstad
Posted in reply to Ola Fosheim Grøstad
| On Friday, 5 November 2021 at 11:54:21 UTC, Ola Fosheim Grøstad wrote:
> On Friday, 5 November 2021 at 11:44:42 UTC, FeepingCreature wrote:
>> When I have to do numeric work and suspect NaNs in play, I like to `feenableexcept(FE_INVALID)`. Then every time a NaN arises in a computation, I get a nice SIGFPE.
>
> Yes, and the IEEE spec suggests that ones should be able to choose whether you get exceptions or compute with NaNs based on the nature of the application/computation. Regardless, as long as hardware follow IEEE and supports using NaN in calculations, you are better off playing up to the IEEE standard (for a modern system level language that means you should have easy access to both approaches).
To put some meat on this. The ideal is that you can have two implementations for the same computation, one fast and one robust. So ideally you should be able to do the computations with NaNs in expressions where the NaNs can disappear and use exceptions where they cannot disappear. If an exception occurs you fall back to the slower robust implementation. In reality you have to weigh in performance characteristic of the hardware so… very much system level programming and not only a choice that can be done on the language level.
For instance in raytracing I would want NaNs. Then I can make a choice based on neighbouring pixels whether I want to compute it again using a slower method or simply fill it in with the average of the neighbours (if all the neighbours have roughly the same colour).
|