Beefy Boxes and Bandwidth Generously Provided by pair Networks
Pathologically Eclectic Rubbish Lister
 
PerlMonks  

Re^5: Detecting whether UV fits into an NV

by roboticus (Chancellor)
on Mar 05, 2020 at 03:38 UTC ( [id://11113813]=note: print w/replies, xml ) Need Help??


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

Rob:

Nice! I'm glad you got a usful result.

Regarding thinking of that trick: I didn't think of it either, but years ago, I read a document that had a lot of bit-fiddling tricks in it, and remembered that there was a trick for that, and my Google-fu let me dredge it up.

...roboticus

When your only tool is a hammer, all problems look like your thumb.

  • Comment on Re^5: Detecting whether UV fits into an NV

Replies are listed 'Best First'.
Re^6: Detecting whether UV fits into an NV
by syphilis (Archbishop) on Mar 06, 2020 at 05:23 UTC
    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

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://11113813]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others making s'mores by the fire in the courtyard of the Monastery: (8)
As of 2024-04-23 10:51 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found