Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl: the Markov chain saw
 
PerlMonks  

Re^3: Unsigned 64-bit integer as Judy key

by Anonymous Monk
on Dec 07, 2022 at 21:56 UTC ( [id://11148660]=note: print w/replies, xml ) Need Help??


in reply to Re^2: Unsigned 64-bit integer as Judy key
in thread Unsigned 64-bit integer as Judy key

so I changed that line #88 to

if ( !SvIsUV($arg) && SvIOK($arg) && SvIV($arg) < 0 ) {

now Judy installs OK with its tests, and a test I posted in OP passes OK. Actually, it's all about 11148465 meditation; I knew Judy technology is amazing and just wanted to check this yet again. With latest llil2d.pl I get

llil2d start get_properties : 10 secs sort + output : 21 secs total : 31 secs

and 2263M of htop's RES, with my Judy script:

my_test start get_properties: 16 secs sort + output: 21 secs total: 37 secs

and 378M of htop's RES. And like I said (in my plan outline there) "words" are not stored in RAM (suppose they are long strings) but read again while writing output, hence relatively long time in 2nd row with almost instantaneous sort by Sort::Packed. I'll post to that thread later.

Replies are listed 'Best First'.
Re^4: Unsigned 64-bit integer as Judy key
by ikegami (Patriarch) on Dec 09, 2022 at 05:19 UTC

    I suspect that the changes doesn't make it stop considering 9223372036854775808 equal to -9223372036854775808.

      Of course not.

      $ perl -MDevel::Peek -E 'Dump $_ for 1<<63,-(1<<63)' SV = IV(0x559e408d8210) at 0x559e408d8220 REFCNT = 1 FLAGS = (IOK,pIOK,IsUV) UV = 9223372036854775808 SV = IV(0x559e408d83c0) at 0x559e408d83d0 REFCNT = 1 FLAGS = (IOK,pIOK) IV = -9223372036854775808 $ perl -MJudy::L=Set -E 'say Set($j, $_, 1) for 1<<63,-(1<<63),0' 94434583711008 Coercing -9223372036854775808 to 0. Can't use negative values as keys. + at -e line 1. 94434579767256 94434579767256

        You didn't retrieve any information from the data structure, so you didn't test it at all. Try this:

        perl -Mv5.14 -MJudy::L=Get,Set -e' my $i = 1<<63; my $j = -$i; my $judy; Set( $judy, $i, 4 ); Set( $judy, $j, 5 ); say( ( Get( $judy, $i ) )[1] ); say( ( Get( $judy, $j ) )[1] ); '

        If you get different values, I was wrong. If you get the same value, each negative value is considered to the same as a very large positive value.

        Without the hack, it outputs 5 twice. I suspect the hack only silences the warning.

        Of course not.

        No, it isn't obvious that the keys are 65 bits (or larger) in size. In fact, they pretty obviously aren't.

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others lurking in the Monastery: (7)
As of 2024-04-25 15:04 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found