[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Old Question





Jacques Basson wrote:

> Hi all
>
> Sorry, this has got to be an old question, but I can't seem to locate
> the answer.  What is the way around the following problem?
>
> IDL> a = -1
> IDL> print, -1^(1./3)
>      -1.00000
> IDL> print, a^(1./3)
>           NaN
> % Program caused arithmetic error: Floating illegal operand
>
> Thanks
> Jacques

Hello,

I now know why it happens.  In the documentation I see...

Exponentiation

The caret (^) is the exponentiation operator. A^B is equal to A raised to
the B power.

 If A is a real number and B is of integer type, repeated multiplication
is applied.
 If A is real and B is real (non-integer), the formula A^B = e^(B ln A)
is evaluated.
 If A is complex and B is real, the formula A^B = (re^(iq))^B = r^B *
(cosBq + isinBq) (where r is the real part of A and iq is the imaginary
part) is evaluated.

 If B is complex, the formula A^B = e^(B ln A) is evaluated. If A is
also complex, the natural logarithm is computed to be ln(A) = ln(re^(iq))
= ln(r) + iq (where r is the real part of A and iq is the imaginary
part).
 A^0 is defined as 1.

Your example falls into the second type of operation.   I don't know how
to get around that but would like to know also.

Ben

--
Ben Tupper
Pemaquid River Company
248 Lower Round Pond Road
POB 106
Bristol, ME 04539

Tel: (207) 563-1048
Email: PemaquidRiver@tidewater.net