3

I am trying to increment a code that uses the setprecision function, but every time I use an example, however simple, it always gives the same error.

when I do: x = big"1.23456789" setprecision(x, 20) I get the following error:

ERROR: LoadError: MethodError: no method matching setprecision(::BigFloat, ::Int64)
Closest candidates are:
  setprecision(::Type{BigFloat}, ::Integer; base) at mpfr.jl:840
  setprecision(::Function, ::Integer; base) at mpfr.jl:969
Stacktrace:
 [1] top-level scope

StefanKarpinski
  • 32,404
  • 10
  • 86
  • 111
Tomaz
  • 181
  • 4

1 Answers1

3

The setprecision function accepts a type, and globally sets the precision for all operations on this type (there is a variant that does this temporary, but let me focus on a simpler scenario). So what you should do is for example:

julia> setprecision(BigFloat, 20) # low precision
20

julia> x = big"1.23456789"
1.2345676

julia> setprecision(BigFloat, 200) # higher precision
200

julia> x = big"1.23456789"
1.2345678900000000000000000000000000000000000000000000000000004

After setprecision all operations on BigFloat values will use the precision you set.

Note that you should set precision first and only next perform some operation. See an example:

julia> x = big"1.23456789"
1.234567889999999999999999999999999999999999999999999999999999999999999999999998

julia> setprecision(BigFloat, 20)
20

julia> x # still high precision because we created x before changing precision
1.234567889999999999999999999999999999999999999999999999999999999999999999999998

julia> x * 1 # the result of computation has lower precision since it is computed after calling setprecision
1.2345676
Bogumił Kamiński
  • 66,844
  • 3
  • 80
  • 107