283283isapproxinteger (:: Integer ) = true
284284isapproxinteger (x) = isinteger (x) || x ≈ round (Int,x) || x+ 1 ≈ round (Int,x+ 1 )
285285
286+ """
287+ _nearest_jacobi_par(α, γ)
286288
287- _nearest_jacobi_par (α, γ) = isapproxinteger (α- γ) ? α : round (Int,α,RoundDown) + mod (γ,1 )
289+ returns a number that is an integer different than γ but less than 1 away from α.
290+ """
291+ function _nearest_jacobi_par (α:: T , γ:: T ) where T
292+ ret = isapproxinteger (α- γ) ? α : round (Int,α,RoundDown) + mod (γ,1 )
293+ ret ≤ - 1 ? ret + 1 : ret
294+ end
295+ _nearest_jacobi_par (α:: T , :: T ) where T<: Integer = α
296+ _nearest_jacobi_par (α, γ) = _nearest_jacobi_par (promote (α,γ)... )
288297
289298
290299struct Ultra2UltraPlanTH{T, Plans, Dims} <: Plan{T}
@@ -296,12 +305,16 @@ end
296305
297306function * (P:: Ultra2UltraPlanTH , A:: AbstractArray )
298307 ret = A
299- for p in P. plans
300- ret = p* ret
301- end
302- c = _nearest_jacobi_par (P. λ₁, P. λ₂)
308+ if isapproxinteger (P. λ₂ - P. λ₁)
309+ _ultra2ultra_integerinc! (ret, P. λ₁, P. λ₂, P. dims)
310+ else
311+ for p in P. plans
312+ ret = p* ret
313+ end
314+ c = _nearest_jacobi_par (P. λ₁, P. λ₂)
303315
304- _ultra2ultra_integerinc! (ret, c, P. λ₂, P. dims)
316+ _ultra2ultra_integerinc! (ret, c, P. λ₂, P. dims)
317+ end
305318end
306319
307320function _ultra2ultraTH_TLC (:: Type{S} , mn, λ₁, λ₂, d) where {S}
0 commit comments