BigInt(big(2017.)^2017) does not generate the correct value which is generated by: big(2017)^2017. Why is their a rounding error with BigFloat?

You can fix this by calling `setprecision`

with a large enough value:

```
julia> big(2017.)^2017 == big(2017)^2017
false
julia> setprecision(100000)
100000
julia> big(2017.)^2017 == big(2017)^2017
true
```

You can also set the precision of individual `BigFloat`

s as `BigFloat(2017, 100000)`

, but it looks like the precision is not propagated through calculations. In the first case, this method is called:

```
function ^(x::BigFloat, y::ClongMax)
z = BigFloat()
ccall((:mpfr_pow_si, :libmpfr), Int32, (Ptr{BigFloat}, Ptr{BigFloat}, Clong, Int32), &z, &x, y, ROUNDING_MODE[])
return z
end
```

You can see that `z`

is created to store the result of the exponentiation, but it uses the default system precision for `BigFloat`

s, not the precision of the `BigFloat`

to be exponentiated.

3 Likes

```
julia> typeof(big(2017)^2017)
BigInt
julia> typeof(big(2017.)^2017)
BigFloat
```

`BigFloat`

is rounded (default precision 256 bits), `BigInt`

is exact.