If a
floating point number don’t has exact representation, then by default that
number is rounded to nearest representable value.
For example,
julia> x=2.1234567; julia> x=x+0.1 2.2234567000000003
When I add 0.1 to 2.1234567, I am
expection 2.2234567, but actual result is 2.2234567000000003. It is because,
Julia rounded it to the nearest value.
Currently following rounding modes are
supported by julia
a.
RoundNearest
It is the default rounding mode, rounds
the floating point to nearest number, with ties (fractional values of 0.5)
being rounded to the nearest even integer.
You can get the current rounding mode
using get_rounding method. You can set the rounding mode for given type using
set_rounding method.
julia> get_rounding(Float64) RoundingMode{:Nearest}() julia> x=1.1; julia> x=x+0.1 1.2000000000000002
b. RoundNearestTiesAway
Rounds to nearest integer, with ties
rounded away from zero.
c.
RoundNearestTiesUp
Rounds to nearest integer, with ties
rounded toward positive infinity
d.
RoundToZero
Returns the nearest integral value of
the same type as x whose absolute value is less than or equal to x
julia> set_rounding(Float64,RoundingMode{:ToZero}()) 0 julia> get_rounding(Float64) RoundingMode{:ToZero}() julia> x=1.1; julia> x=x+0.1 1.2
e.
RoundUp
Returns the nearest integral value of
the same type as x that is greater than or equal to x.
julia> set_rounding(Float64,RoundingMode{:Up}()) 0 julia> get_rounding(Float64) RoundingMode{:Up}() julia> x=1.1; julia> x=x+0.1 1.2000000000000002 julia> x=x+0.1 1.3000000000000003 julia> x=x+0.1123 1.4123000000000003 julia> x=x+0.1 1.5123000000000004
f. RoundDown
Returns the
nearest integral value of the same type as x that is less than or equal to x.
julia> get_rounding(Float64) RoundingMode{:Down}() julia> x=1.1; julia> x=x+0.1 1.2
You can
change the rounding mode for particular block of code using ‘with_rounding(f::Function,
T, mode)’.
julia> with_rounding(BigFloat,RoundUp) do BigFloat(1) + parse(BigFloat, "0.001") end 1.001000000000000000000000000000000000000000000000000000000000000000000000000001
No comments:
Post a Comment