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 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}```

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 making s'mores by the fire in the courtyard of the Monastery: (3)
As of 2024-09-07 18:34 GMT
Sections?
Information?
Find Nodes?
Leftovers?
Voting Booth?

No recent polls found

Notices?
 • erzuuli ‥ 🛈The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.