Keep It Simple, Stupid PerlMonks

### Re: Zeckendorf representation

by jwkrahn (Monsignor)
 on Aug 25, 2012 at 02:58 UTC ( #989681=note: print w/replies, xml ) Need Help??

```sub is_fibonnacci {
my \$plus = (5 * \$_[0] * \$_[0]) + 4;
my \$mins = (5 * \$_[0] * \$_[0]) - 4;
return is_perfect_square(\$plus) | is_perfect_square(\$mins);
}

No need to calculate 5 * \$_[0] * \$_[0] twice, and you probably meant to use the logical or operator instead of the bit-wise or operator.

```sub is_fibonnacci {
my \$plus = (5 * \$_[0] * \$_[0]) + 4;
my \$mins = \$plus - 8;
return is_perfect_square(\$plus) || is_perfect_square(\$mins);
}

(The logical operators short-circuit so is_perfect_square(\$mins) will only execute if is_perfect_square(\$plus) is true.)

```sub is_perfect_square {
my \$sqrt = int(sqrt(\$_[0]));
return \$sqrt * \$sqrt == \$_[0];
}

Or just:

```sub is_perfect_square { int( \$_[0] ** .5 ) ** 2 == \$_[0] }

Replies are listed 'Best First'.
Re^2: Zeckendorf representation
by thmsdrew (Scribe) on Aug 25, 2012 at 03:11 UTC

Thanks for your input! What do you mean by "short circuit"? Also, the difference between your is_perfect_square sub and mine is that mine is much more clear. I can afford the extra line for a bit of clarity.

What do you mean by "short circuit"?
It means that the part after || will only be evaluated if it is needed know the result of the operator. In the case of the or-operator the second half is redundant if the first is true, since the total will be true no matter what the second part is.

I don't really understand how that is a problem. If the first part passes, then I want it to return true, and I truly don't care what the second part is. I guess I see how that's redundant, though.

Create A New User
Node Status?
node history
Node Type: note [id://989681]
help
Chatterbox?
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others scrutinizing the Monastery: (3)
As of 2017-11-21 05:21 GMT
Sections?
Information?
Find Nodes?
Leftovers?
Voting Booth?
In order to be able to say "I know Perl", you must have:

Results (295 votes). Check out past polls.

Notices?