Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

Why don't they just change the current +/-inf to NaN, and then have the adjacent values be -inf or +inf.

Or is that exception hard to implement?



here is the spec we drafted a few months ago on exactly what you suggest.

https://github.com/interplanetary-robot/SigmoidNumbers/blob/...


Doesn't that proposal remove the infinities altogether?


Yep!


So... not exactly what I suggested then?


oh whoops, reading comprehension fail! Yeah that is an interesting idea that crossed my mind! I'm a little bit hesitant to do that because 1) infinities are not really that important to have, and 2) if we have them we want them to be exact values in the Valid representation, which any value ending in a binary 1 would not be.


Great observation! That's a compuational mode we are discussing. It's actually trivial to implement.


Another option could be to borrow a trick from floating point, and have a separate status register with bits that represent the kinds of errors encountered. Before a many-step calculation, software could clear these bits, and if any of them is set after the calculation, there was an error somewhere. Of course, since you don't have a NaN, you have to specify the bit pattern which will be returned by each kind of failing operation (like RISC-V does with integer divide by zero).

That doesn't help if the result could be partially valid, but if a "square root of minus one" or similar anywhere in the calculation means the result is invalid (and would be a NaN under floating point), sticky error bits in a status register could be sufficient.


question: How do you access this status register using standard C? (because if you can't, basically no one will use it)


You use feclearexcept() and fetestexcept() from fenv.h: https://linux.die.net/man/3/fenv


Awesome, thanks!!!




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: