-
Notifications
You must be signed in to change notification settings - Fork 72
Open
Description
crt_inv
takes much longer (sometimes 10x as long) on negative inputs than on positive ones.
# crt_inv does not like negative numbers
L = collect(PrimesSet(1000000,5000000));
ce = crt_env(ZZ.(L));
function f1(ce::crt_env)
v = ZZ(123456789);
return crt_inv(v,ce);
end
function f1seq(L::Vector{Int})
v = ZZ(123456789);
return [v%p for p in L];
end
function f2(ce::crt_env)
v = ZZ(-123456789);
return crt_inv(v,ce);
end
function f2seq(L::Vector{Int})
v = ZZ(-123456789);
return [v%p for p in L];
end
function f3(ce::crt_env)
v = ZZ(1023)^819; # a bit less than 2^8192
return crt_inv(v,ce);
end
function f4(ce::crt_env)
v = -ZZ(1023)^819; # a bit less than 2^8192
return crt_inv(v,ce);
end
function f4a(ce::crt_env)
v = -ZZ(1023)^819; # a bit less than 2^8192
return -crt_inv(-v,ce);
end
Base.GC.gc(true);
Base.GC.enable(false);
println("Sequential: reduce positive");
jj1 = f1seq(L);
@time jj1 = f1seq(L);
println("Sequential: reduce negative");
jj2 = f2seq(L);
@time jj2 = f2seq(L);
println("Tree: reduce small positive");
j1 = f1(ce); # just to force compilation
@time j1 = f1(ce);
println("Tree: reduce small negative");
j2 = f2(ce); # just to force compilation
@time j2 = f2(ce);
println("Tree: reduce large positive");
j3 = f3(ce); # just to force compilation
@time j3 = f3(ce);
println("Tree: reduce large negative");
j4 = f4(ce); # just to force compilation
@time j4 = f4(ce);
println("Tree: negate reduction of large positive");
j4a = f4a(ce); # just to force compilation
@time j4a = f4a(ce);
Base.GC.enable(true);
Metadata
Metadata
Assignees
Labels
No labels