Negative integer exponent

From documentation on ^:

If y is an Int literal (e.g. 2 in x^2 or -3 in x^-3), the Julia code x^y is transformed by the compiler to Base.literal_pow(^, x, Val(y)), to enable compile-time specialization on the value of the exponent. (As a default fallback we have Base.literal_pow(^, x, Val(y)) = ^(x,y), where usually ^ == Base.^ unless ^ has been defined in the calling namespace.) If y is a negative integer literal, then Base.literal_pow transforms the operation to inv(x)^-y by default, where -y
is positive.

julia> Base.literal_pow(^, 3, Val(-3))
0.037037037037037035

g() in 2^g() is not a literal, so this transformation does not happen.

1 Like