# ERROR: DomainError, Complex numbers?

Hi all!

I have a very simple expression similar to:

``````a = b ^ c
``````

with `b` and `c` as positive floating point numbers.

The expression above is part of nested functions (outer and inner functions) with each function defined within the scope of its parent function.

If I run my these nested functions from a `Main.jl` file, I get the following error (despite `a` and `b` being positive `Float64`):

``````ERROR: DomainError with -5.991263951486869e-16:
Exponentiation yielding a complex result requires a complex argument.
Replace x^y with (x+0im)^y, Complex(x)^y, or similar.
``````

I tried to sort this error out with the function `real()` but didnâ€™t work.

Interestingly, if I run my functions line by line (instead of calling the `Main.jl` file), I can compute the expression above without the error (giving me as a result a floating point number).

I would appreciate any advice/comment/help on this because I am out of ideas!

Thanks

put a print statement in. the base of the exponent is negative.

1 Like

Thanks! I am 100% sure that the base of the exponent is a positive floating number. When I print `b` in my example, I get: `21.778641870591873`, and the value of the expression `a` is printed as: `1.2954354359893232`

As @Oscar_Smith suggested, you should evaluate the expression, assign it to a variable `a`, and print it and `b` just before you call `a^b`. You are 100% sure `a` is positive, but the error message tells us that `a` is negative. You need to figure out where/what the discrepancy is.

If youâ€™re 100% sure `a` is positive because the expression is provably positive, be aware that floating point numbers donâ€™t obey the same rules as the reals. Your value of `a` is negative but very small, suggesting that it should be zero or a small positive, but instead is negative due to rounding errors.

1 Like

Apologies, @Oscar_Smith, I didnâ€™t get your comment right away but with the clarification of @John_Gibson, now I see what you meant.

Printing the exponent before the expression gave me some insights. I donâ€™t know how but, indeed, there were some very small negative numbers in there.

For the moment, I am taking the absolute value of the base of the exponent to avoid the error:

`a = abs(b) ^ c`

Thanks for the help!

That number looks to be on the order of `eps(Float64)`, so it could easily come about in floating point calculations, even with something simple like `a-b` where `a` and `b` seem equal.