anchor.diff:      
       real(real64), intent(in) :: alpha
       integer(int32) :: i
  -    real(real64)   :: a(nfrq)
  +    real(real64)   :: a(ngtz)
   
       hdir = 0.0_real64
  -    do i = 1,nfrq 
  -       a(i) = - sparse_multip(i) * (sparse_multip_frq(i) - one + alpha) * digamma(sparse_multip_frq(i) + alpha) 
  +    do i = 1,ngtz 
  +       a(i) = - multi_gtz(i) * (fgtz(i) - one + alpha) * digamma(fgtz(i) + alpha) 
       end do
       hdir = sum(a)
       hdir = hdir / (ndata + alpha * alphabet_size)
  
positive.code:      return
    end if
  
    call compute_multiplicities(counts, nc, sparse_multip_frq, sparse_multip)
  
    call compute_integration_range()
  
    call hnsb(estimate,err_estimate)
  
    deallocate(sparse_multip_frq,sparse_multip)
  
  end subroutine nsb
  
  
negative.code:   integer(int32) :: i
    real(real64)   :: ni,ndata
    integer(int32)              :: mi,nmax,err
    integer(int32), allocatable :: multiplicities(:)
  
    !! this is the old 'standard' implementation.
    !! the code using multiplicities is faster
  