[ANN] ZChop.jl v0.3.5

ZChop.jl was written in December 2015. This is the first version with a new feature: Functions nchop and nchop!. This represents the culmination of a few hours of work.

EDIT: The original function zchop does this:

zchop(x) replaces numbers in x that are close to zero with zero.

zchop(x) returns 0 if abs(x) is smaller than 1e-14, and x otherwise.

zchop(x,eps) uses eps rather than 1e-14

zchop!(a,eps) works inplace on Arrays and nested Arrays.

I added nchop in response to a slack post by @staticfloat . Following the example in that post

julia> x = [7.401486830834377e-17 + 3.700743415417188e-17im
    8.26024732898714e-17 + 7.020733317042351e-17im
      0.9999999999999997 + 1.0000000000000002im
 -1.0177044392397268e-16 - 6.476300976980079e-17im
                     0.0 - 7.401486830834377e-17im
 -4.5595039135699516e-17 - 2.1823706978711105e-16im
  1.2952601953960158e-16 + 0.0im
 -2.1079998571544233e-16 + 5.303212320736824e-17im
                     0.0 - 7.401486830834377e-17im
  -6.476300976980079e-17 + 2.498001805406602e-16im
   7.401486830834377e-17 - 1.4802973661668753e-16im
   1.7379255156127046e-16 + 2.0982745100975517e-17im]

julia> nchop(x)
12-element Vector{ComplexF64}:
  0.0 + 0.0im
  0.0 + 0.0im
  1.0 + 1.0im
 -0.0 - 0.0im
  0.0 - 0.0im
 -0.0 - 0.0im
  0.0 + 0.0im
 -0.0 + 0.0im
  0.0 - 0.0im
 -0.0 + 0.0im
  0.0 - 0.0im
  0.0 + 0.0im

You could get the same result with round.(x; digits=12) (maybe you have to look it up first). Or, as in the slack post, Base.show(io::IO, f::Float64) = @printf(io, "%.2f", f) !

But, there are other features, efficiency, nchop!, zchop , and zchop!, which would require some thought and different incantations of round.

10 Likes