Beefy Boxes and Bandwidth Generously Provided by pair Networks
We don't bite newbies here... much
 
PerlMonks  

Re: Seeing if two numbers have the same sign

by f00li5h (Chaplain)
on Jan 10, 2008 at 14:56 UTC ( [id://661626]=note: print w/replies, xml ) Need Help??


in reply to Seeing if two numbers have the same sign

sub same_sign{ my($left, $right) =@_; (0 <=> $left) == (0<=> $right); }

@_=qw; ask f00li5h to appear and remain for a moment of pretend better than a lifetime;;s;;@_[map hex,split'',B204316D8C2A4516DE];;y/05/os/&print;

Replies are listed 'Best First'.
Re^2: Seeing if two numbers have the same sign
by WoodyWeaver (Monk) on Jan 10, 2008 at 15:15 UTC
    What is the goal here?

    Using <=> is clever, I think. And by that I mean that it invokes a less common set of symbols to come to a result in a surprising and elegant way.

    I'm not sure that is good, though. Assuming that if either variable is zero you should return 0, my first thought was

    if ($left > 0) { if ($right > 0) { # both pos return 1 } } elsif ($left < 0) { if ($right < 0) { # both neg return 1 } } return 0;
    That is, anchor one, see if the other is the same, and if so return 1; otherwise, fall through and return 0.

    I think this is bad because its a whole bunch of lines. On the other hand, I think its good because its dead obvious, and probably pretty fast (fewer compares and jumps than even the double '<=>' version).

    ymmv. "What is good?", asked jesting Pilate, not waiting for an answer.

    --woody

      Using the shuttles I'm basiclaly asking "Do these 2 numbers compare to zero the same way"

      Personally i'm a fan of the $left * $right > 0 solution, it has a nice mathy feel. although may have issues for massive numbers etc (Corion++ on that count)

      @_=qw; ask f00li5h to appear and remain for a moment of pretend better than a lifetime;;s;;@_[map hex,split'',B204316D8C2A4516DE];;y/05/os/&print;

Re^2: Seeing if two numbers have the same sign
by shmem (Chancellor) on Jan 10, 2008 at 16:52 UTC
    Nice, f00li5h++
    sub same_sign { (0 <=> $_[0]) == (0 <=> $_[1]) || (! $_[0] || ! $_[1]); }

    to check for either operand being somewhat false ;-)

    --shmem

    _($_=" "x(1<<5)."?\n".q·/)Oo.  G°\        /
                                  /\_¯/(q    /
    ----------------------------  \__(m.====·.(_("always off the crowd"))."·
    ");sub _{s./.($e="'Itrs `mnsgdq Gdbj O`qkdq")=~y/"-y/#-z/;$e.e && print}

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others wandering the Monastery: (6)
As of 2024-04-19 14:05 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found