▲ | rtpg 14 hours ago | |||||||
Do all float operations need to reconfirm those bits afterwards though? I suppose if you have some sort of JIT you can end up with a bunch of unboxed floats and would only pay the cost on boundaries though | ||||||||
▲ | pansa2 13 hours ago | parent | next [-] | |||||||
> reconfirm those bits afterwards Thanks - I hadn't thought about that but it seems to be the main downside of this approach. The benefit of NaN-boxing is that it reassigns values that are otherwise unused - floating-point calculations will never generate NaNs with those bit patterns. | ||||||||
| ||||||||
▲ | phire 9 hours ago | parent | prev | next [-] | |||||||
Yes, but there should be some optimisation opportunities. Off the top of my head: Any multiply by a constant less than 1.0 will never overflow the unboxed range (but might underflow) and there should be times when it's provably better to check the inputs are inside a range, rather than checking the outputs. It's worth pointing out that these overflow/underflow checks will be very cold (on typical code). They won't waste much in the way of branch-prediction resources. I wonder if it's worth taking advantage of floating point overflow/underflow exceptions. I think a multiplication by 2^767 will trigger an exception if the value would overflow, and the corresponding multiply by 2^-765 will catch underflows. It's tempting to allocate two more tags for floats (001 and 010), covering the entire range from -2^257 to +2^257. It will be rare to actually see those small floats near zero, but it could be worth eliminating the possibility of underflows. | ||||||||
▲ | ithkuil 5 hours ago | parent | prev | next [-] | |||||||
You check the tag before doing float operations | ||||||||
| ||||||||
▲ | lifthrasiir 14 hours ago | parent | prev [-] | |||||||
Only when they have to be boxed, but yes if you are talking about that. | ||||||||
|