In Julia `REPL`

, I input `2^(3^4)`

or `big(2^(3^4))`

, still give me `0`

.

So, how to get the right answer?

Julia is not overflow-aware for native numerical types. The answer is `2^81`

which canâ€™t be represented by the Int64 type, you only get the last 64 bits which are all zero. You must either use Float (i.e. `2.0^(3^4)`

) or a larger integer type like `big"2"^(3^4)`

(this can accomodate arbitrarily large integers), or `int128"2"^(3^4)`

.

cool! But whatâ€™s the means for `"2"`

And note the difference between `big(2^(3^4))`

on one side and `big(2)^(3^4))`

on the other.

In the first case the computtion is made using `Int64`

numbers, and only the result is converted to `BigInt`

, when â€śit is too lateâ€ť and the number has already overflown.

In the second case instead the operation involves at least one `BigInt`

and all operands are casted to `BigInt`

leading to the right result.

Again, so letâ€™s do this work

```
x=2
y=81
# big"x"^y
# big"$(x)"^y
big(x)^y
```

So, I stiil confused with `big"x"`

.

macros are expanded at parse time which is before x has a value. a string macro can only see the literal contents of the string.

```
julia> x = 2; y = big"2";
julia> typeof(x)
Int64
julia> typeof(y)
BigInt
```