http://qs321.pair.com?node_id=11113899


in reply to Re^5: Detecting whether UV fits into an NV
in thread Detecting whether UV fits into an NV

I didn't think of it either

It's also worth pointing out that once you've isolated that critical bit, it's still not exactly braindead straightforward as to how best to make use of that info.
Think of an integer, find its least significant set bit, left-shift its value 53 places, subtract 1, flip all of the bits, and then & that result with the number you first thought of.

I made a small modification to the sub so that it handled negative and positive IV/UV values.
I also compounded the guts of the code into 2 lines. (It could be put into 1 line, but I didn't go that far.)
Here's what I ended up with ... minus explanatory comments.
int iv_fits_double(SV * t, ...) { dXSARGS; int i, count = 0; for(i = 0; i < items; i++) { IV arg = SvIV(ST(i)); int sign = ( arg > 0 || SvUOK(ST(i)) ) ? 1 : -1; UV valid_bits = ((arg & -arg) << 53) - 1; if(!((arg * sign) & (~valid_bits))) count++; } return count; }
Cheers,
Rob