Beefy Boxes and Bandwidth Generously Provided by pair Networks
Just another Perl shrine

negative sqrt()

by Parham (Friar)
on Feb 09, 2002 at 15:42 UTC ( #144360=perlquestion: print w/replies, xml ) Need Help??
Parham has asked for the wisdom of the Perl Monks concerning the following question:

i ran into the problem where my program would sometimes be forced to take negative square roots. I tried to catch an error somewhere in the function, but couldn't do so. I've tried the following:
eval { $number = sqrt(-1) }; if ($@) { print "negative sqrt"; }
$number = sqrt(-1) or die "error";
$number = sqrt(-1) or print "error";
all with no luck. Math::Complex manages to take negative squareroots, but i didn't wanna bother doing that. The only good solution i can come up with right now is checking for a negative number before performing the function. Any ideas on alternatives?

Replies are listed 'Best First'.
Re: negative sqrt()
by Fletch (Chancellor) on Feb 09, 2002 at 16:04 UTC

    The eval works fine, so long as you're not passing a constant -1 as an argument (which the compiler will catch and gripe about). Compare:

    $ perl -le 'BEGIN { print "in begin" } eval { $i = <> ; $r = sqrt( -1 +) }; print ($@ ? "error: $@" : $r)' + in begin Can't take sqrt of -1 at -e line 1.


    echo -1 | perl -le 'BEGIN { print "in begin" } eval { $i = <> ; $r = s +qrt( $i ) }; print ($@ ? "error: $@" : $r)' + in begin error: Can't take sqrt of -1 at -e line 1, <> line 1.
(jeffa) Re: negative sqrt()
by jeffa (Bishop) on Feb 09, 2002 at 15:48 UTC
    $ perldoc -f sqrt
      sqrt EXPR
      sqrt    Return the square root of EXPR.  If EXPR is
              omitted, returns square root of "$_".  Only works
              on non-negative operands, unless you've loaded the
              standard Math::Complex module.
              use Math::Complex;
              print sqrt(-2);    # prints 1.4142135623731i

    But i didn't really answer the question, "why can't you 'catch' this exception" ... is it possible? Why yes it is! Fletch++!


    (the triplet paradiddle with high-hat)

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://144360]
Approved by root
and dust plays in a shaft of sunlight...

How do I use this? | Other CB clients
Other Users?
Others imbibing at the Monastery: (6)
As of 2018-03-17 21:07 GMT
Find Nodes?
    Voting Booth?
    When I think of a mole I think of:

    Results (226 votes). Check out past polls.