Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implement fmpz_poly_divexact #1766

Merged
merged 2 commits into from Feb 3, 2024
Merged

Implement fmpz_poly_divexact #1766

merged 2 commits into from Feb 3, 2024

Conversation

fredrik-johansson
Copy link
Collaborator

@fredrik-johansson fredrik-johansson commented Feb 3, 2024

Allows computing A / B = Q more efficiently than a checked division in the basecase and near-basecase range.

Tuning could be improved, but probably multiplication and normal division tuning should be done first.

Sample speedups over fmpz_poly_div with randtest polynomials with varying number of coefficient bits.

bitsB = bitsQ = 10

lenB \ lenQ
         1    2    3    4    6    8   11   16   23   32   45   64   91  128  181  256  362  512  724 1024 1448 2048 2896 4096 
    1 4.40 5.27 5.88 5.79 7.62 8.00 9.03 9.00 9.44 9.99 9.99 9.99 9.99 8.08 9.99 9.99 9.99 9.99 9.99 9.99 9.99 9.99 9.99 9.99 
    2 4.30 2.54 4.80 2.10 4.71 2.00 1.73 1.81 5.43 2.15 5.88 6.09 1.91 1.80 1.86 2.15 5.69 5.56 6.67 6.47 1.94 1.88 5.33 1.82 
    3 4.48 2.10 2.00 2.42 2.00 1.91 1.88 1.83 1.71 1.80 1.62 1.60 1.69 1.56 1.80 1.67 6.67 1.56 1.55 1.56 6.73 2.08 1.53 1.45 
    4 4.78 1.83 2.14 1.52 2.17 1.92 2.27 1.88 1.73 1.81 6.11 1.78 1.77 1.68 1.65 1.00 1.55 1.97 2.00 1.63 1.44 1.42 1.48 1.46 
    6 4.30 2.34 1.98 1.77 1.67 2.58 2.06 2.27 1.72 1.88 7.65 1.73 7.27 1.74 1.89 1.80 1.61 1.50 1.69 1.67 1.65 1.58 1.55 1.40 
    8 4.30 1.86 1.82 1.52 1.59 3.40 2.56 2.60 2.10 2.26 1.84 1.69 8.18 1.52 1.79 1.66 1.64 1.70 1.71 1.59 1.64 1.47 1.39 1.60 
   11 4.30 2.00 2.07 1.28 1.63 1.83 1.76 2.48 2.33 1.15 1.96 1.93 2.06 1.96 1.76 1.72 1.67 9.99 1.81 1.69 1.66 1.64 1.40 1.54 
   16 4.54 2.10 1.86 1.75 1.64 1.00 2.00 2.42 2.33 3.20 1.82 0.91 2.04 0.78 2.41 1.86 1.80 1.93 2.05 1.55 1.36 1.46 1.72 1.44 
   23 4.89 2.27 1.79 1.77 1.74 1.42 2.12 1.85 1.37 2.58 2.29 1.89 1.68 0.88 1.69 1.65 1.58 1.56 1.21 0.95 1.06 1.00 1.06 1.57 
   32 4.40 1.90 2.20 1.82 1.80 1.08 1.62 1.84 1.35 2.30 2.36 2.39 1.69 2.33 1.57 1.33 1.44 1.21 4.00 0.86 0.85 1.00 1.04 1.03 
   45 4.78 2.10 1.49 1.75 1.11 2.00 1.56 1.78 2.23 2.00 2.00 2.05 1.20 1.54 1.44 1.38 1.09 0.85 0.78 1.65 0.71 0.64 1.27 0.80 
   64 4.43 2.17 2.05 1.77 1.91 1.33 1.62 2.12 2.24 2.43 2.18 1.22 2.00 1.61 1.18 1.00 0.96 0.98 1.00 0.99 0.92 1.00 1.04 1.00 
   91 4.40 2.40 1.79 1.48 1.67 1.77 1.89 2.00 1.83 2.15 2.09 2.11 1.83 1.61 1.17 1.00 1.00 0.98 0.98 0.99 1.00 1.00 1.00 1.00 
  128 4.40 2.55 1.86 1.80 1.38 1.75 1.83 0.96 2.05 2.19 2.18 2.11 1.79 0.71 1.33 0.96 1.03 0.98 1.00 0.91 0.94 0.92 0.97 0.96 
  181 4.40 2.13 0.21 1.75 1.89 2.00 1.78 2.07 1.89 2.03 2.18 1.79 1.75 1.57 1.36 1.00 1.00 1.00 1.00 1.09 0.94 1.00 0.97 1.00 
  256 4.40 2.59 1.78 1.80 1.61 1.25 1.82 2.27 2.38 2.35 2.00 2.17 1.71 1.56 1.33 0.96 1.00 1.00 1.00 0.92 0.95 1.00 0.98 1.00 
  362 4.40 2.10 1.77 1.18 1.89 1.69 2.06 1.92 2.17 2.25 2.30 1.95 1.72 1.67 1.25 1.00 1.00 1.00 1.00 0.93 1.00 1.00 0.98 0.98 
  512 4.40 2.07 1.98 1.46 1.56 1.55 2.12 2.04 2.33 2.34 2.40 2.00 1.82 1.59 1.36 0.96 0.97 0.98 0.95 1.00 0.96 1.03 0.98 0.97 
  724 4.40 2.17 2.27 1.86 1.56 1.69 1.59 1.70 1.79 2.19 2.40 2.11 1.89 1.54 1.25 0.96 1.00 0.98 1.00 1.00 1.00 1.00 0.98 0.99 
 1024 4.70 2.35 1.75 1.61 1.55 1.67 0.94 2.15 1.89 2.38 2.10 2.11 1.74 1.60 1.33 1.00 1.03 0.98 1.11 1.00 1.00 1.00 0.98 0.97 
 1448 4.40 1.97 1.93 1.77 1.76 1.45 1.72 2.14 2.50 2.46 2.00 2.05 1.34 1.59 1.25 1.00 1.00 0.98 1.05 1.00 1.00 1.00 1.00 1.00 
 2048 4.40 2.17 1.61 1.60 1.50 1.62 2.06 2.15 2.56 1.14 2.60 1.95 1.84 1.59 1.36 0.96 1.00 0.98 1.00 1.00 0.96 1.03 0.98 0.98 
 2896 4.54 1.90 1.88 1.77 1.60 1.77 1.89 1.70 2.50 2.34 2.09 2.00 1.77 1.55 1.25 1.00 1.00 0.98 1.00 0.94 1.04 0.97 0.95 1.00 
 4096 4.40 1.87 2.05 1.67 1.60 2.00 1.72 2.04 2.44 1.72 2.27 0.93 1.85 1.59 1.55 1.00 1.00 0.98 1.00 0.94 1.00 0.98 1.00 0.98 
bitsB = bitsQ = 100

lenB \ lenQ
         1    2    3    4    6    8   11   16   23   32   45   64   91  128  181  256  362  512  724 1024 1448 2048 2896 4096 
    1 8.33 9.99 3.95 4.16 5.27 9.84 5.19 3.33 3.44 3.10 3.94 5.22 2.90 5.29 9.99 6.80 5.61 4.74 5.53 7.62 5.56 3.33 2.90 3.23 
    2 2.44 2.70 3.55 2.24 3.43 2.89 1.84 2.98 4.65 2.61 1.78 2.53 2.45 2.75 1.92 2.00 2.42 1.81 1.86 2.86 2.35 2.47 1.87 7.11 
    3 5.19 3.10 2.04 2.67 2.73 2.63 2.97 2.34 2.13 3.47 6.34 2.27 2.86 2.25 1.94 2.80 2.25 2.64 3.82 3.24 3.27 1.76 3.00 3.46 
    4 2.94 2.88 3.43 2.25 3.41 2.50 3.72 2.63 2.45 2.21 4.00 2.77 2.95 2.09 2.50 2.71 2.18 6.86 3.45 2.71 2.62 3.54 2.04 2.14 
    6 2.56 2.73 3.20 2.25 1.82 3.55 3.60 2.99 2.76 2.33 3.05 2.36 3.41 7.06 2.44 2.61 3.23 3.26 2.55 2.30 2.75 1.70 1.79 1.80 
    8 2.61 3.46 1.51 1.60 2.81 1.68 4.84 4.29 2.92 3.50 2.74 3.13 2.54 2.00 3.10 2.65 2.32 2.75 2.73 2.62 2.55 2.17 2.46 3.18 
   11 4.85 2.70 2.08 1.94 1.90 2.27 2.19 3.44 3.83 3.14 2.63 2.42 1.00 2.66 2.42 2.17 2.84 2.68 3.21 2.08 2.22 2.17 2.23 2.04 
   16 2.94 3.78 3.02 2.29 1.65 2.53 3.73 3.33 3.59 5.71 3.06 2.97 2.58 2.67 2.53 2.40 2.78 2.73 1.67 1.74 1.64 1.74 1.69 1.94 
   23 4.65 2.26 1.92 2.41 2.39 2.88 2.22 2.29 3.78 4.58 4.44 3.57 3.08 3.00 2.61 3.33 2.46 2.27 1.83 2.18 1.85 5.52 2.03 2.00 
   32 2.50 2.50 1.80 1.71 2.77 2.02 1.97 3.13 3.78 4.00 3.91 4.31 3.17 3.11 3.25 2.93 2.02 2.27 1.64 1.76 1.63 1.86 1.70 1.79 
   45 2.50 3.62 3.82 1.73 1.67 1.84 2.78 2.09 3.47 3.33 4.87 4.46 6.11 9.00 2.70 1.81 1.77 1.67 1.45 1.67 1.56 2.65 1.40 1.50 
   64 4.70 2.44 3.20 1.86 3.06 1.87 3.33 3.07 4.91 5.21 4.52 4.48 3.73 3.54 1.77 1.00 1.00 0.98 1.02 1.00 1.00 1.06 1.00 1.00 
   91 4.50 2.69 2.21 1.48 2.11 2.46 2.22 3.50 3.76 4.23 4.17 4.11 4.38 3.52 2.45 1.00 1.00 1.00 1.00 0.94 1.00 1.00 1.00 1.00 
  128 4.50 2.20 1.93 1.67 3.75 1.68 2.55 2.18 3.65 4.30 3.96 4.23 3.80 3.41 2.38 1.00 1.00 1.00 1.01 1.00 1.00 1.00 1.00 1.00 
  181 4.61 3.62 4.20 1.65 3.06 2.48 2.32 3.83 4.62 4.00 4.87 4.03 4.58 3.46 2.14 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 0.98 
  256 4.88 2.40 1.23 1.53 1.76 2.65 3.11 2.90 4.60 3.95 4.47 4.48 4.14 3.91 2.46 1.00 1.00 1.00 1.00 1.00 1.00 1.00 0.97 1.00 
  362 2.75 2.03 1.94 0.46 1.95 2.16 3.06 2.55 4.06 3.85 5.16 4.34 4.07 3.82 2.21 0.96 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 
  512 4.50 2.69 4.29 1.81 1.81 2.12 2.74 2.33 3.61 4.00 5.41 3.92 4.75 3.74 2.34 1.00 1.02 0.98 0.91 1.07 1.00 1.00 1.02 1.00 
  724 2.44 4.59 3.77 1.90 2.57 2.33 3.28 2.79 4.91 4.27 6.00 4.00 3.73 3.56 2.16 0.96 1.00 1.00 0.91 1.06 0.96 1.00 1.02 1.00 
 1024 5.19 2.93 2.60 1.74 1.88 2.08 2.50 3.89 4.57 5.40 4.75 3.95 4.21 3.75 2.46 1.00 0.98 1.00 1.00 1.00 1.00 1.00 1.00 1.01 
 1448 2.39 3.97 2.50 1.35 2.26 1.61 2.60 2.50 3.32 3.68 3.96 3.83 4.82 3.83 2.55 1.00 0.98 1.02 1.00 1.00 0.96 1.03 0.98 1.00 
 2048 2.64 2.53 1.81 3.83 2.42 3.19 2.06 2.50 3.47 3.79 4.35 4.43 4.07 3.44 2.42 1.00 1.00 0.99 0.91 1.07 1.04 1.00 1.00 1.01 
 2896 4.88 2.00 3.49 1.91 1.56 2.97 1.87 3.08 4.54 4.19 8.46 4.37 3.80 3.33 2.34 0.96 1.00 1.00 1.00 1.07 1.00 1.00 0.98 1.01 
 4096 2.50 3.42 3.09 1.92 2.17 2.62 2.32 2.00 3.67 4.22 4.44 4.13 4.67 3.10 2.42 0.96 1.00 1.00 1.10 1.00 1.00 1.00 1.00 1.01 
bitsB = bitsQ = 1000

lenB \ lenQ
         1    2    3    4    6    8   11   16   23   32   45   64   91  128  181  256  362  512  724 1024 1448 2048 2896 4096 
    1 4.40 4.21 2.67 5.19 4.12 4.53 4.13 3.45 4.08 3.76 5.19 4.05 5.06 3.95 3.82 3.56 4.07 2.45 4.67 2.50 4.32 4.50 2.90 3.94 
    2 3.41 2.12 3.12 2.93 2.75 2.47 2.29 2.83 2.56 2.21 2.57 2.50 2.47 2.47 2.29 2.50 2.69 2.39 2.80 2.31 2.14 2.28 2.97 2.34 
    3 2.29 2.74 1.91 3.25 2.16 2.66 2.13 5.00 2.05 1.68 1.49 2.18 2.06 2.22 1.92 2.35 2.00 2.00 2.00 2.26 1.89 1.89 2.50 4.19 
    4 2.70 1.89 2.11 2.33 3.25 3.05 2.09 2.41 2.05 2.07 1.92 2.80 2.00 2.57 1.93 2.94 2.14 4.47 2.44 1.93 1.91 1.80 1.82 2.20 
    6 1.87 2.30 2.22 2.54 2.29 3.33 2.42 2.78 2.39 1.90 1.79 1.88 1.70 1.49 1.77 1.65 1.73 2.72 1.95 1.52 1.77 1.56 2.05 1.53 
    8 3.75 3.69 2.96 2.14 2.00 2.19 2.79 2.48 1.65 2.09 2.34 1.58 1.67 1.50 1.40 1.55 1.60 1.30 1.48 1.48 1.89 1.46 1.42 1.42 
   11 1.85 3.50 2.74 2.42 1.90 1.25 3.00 2.44 2.54 2.48 2.92 1.69 1.62 1.69 1.59 1.50 2.24 1.62 1.44 1.35 1.21 2.33 1.50 1.25 
   16 2.35 3.31 4.57 3.33 2.77 2.47 2.06 2.86 3.33 2.60 1.90 1.73 1.36 1.56 1.44 1.38 1.41 1.24 1.45 1.25 2.03 1.20 1.25 1.33 
   23 2.99 2.73 2.14 3.03 2.44 2.08 2.53 2.24 5.28 4.27 3.30 2.35 2.14 2.09 5.10 1.88 1.78 1.58 1.64 1.73 1.71 1.73 3.67 1.83 
   32 3.18 2.67 2.85 3.33 2.53 2.50 3.24 2.36 4.92 3.36 3.82 2.96 2.00 2.00 1.61 1.63 1.45 1.40 1.40 1.53 1.39 9.99 1.38 1.44 
   45 2.31 3.13 4.89 3.02 2.13 2.40 2.50 1.80 4.69 3.29 4.23 3.80 3.40 2.14 2.14 1.60 1.78 1.50 1.63 1.48 1.52 1.48 1.38 1.50 
   64 3.47 3.38 3.00 2.69 2.21 1.62 2.40 2.52 4.41 3.64 3.55 3.10 9.57 1.02 1.04 1.09 1.00 0.96 1.03 1.00 1.01 1.05 0.93 1.05 
   91 2.50 3.43 2.29 2.64 2.73 2.55 2.10 1.64 4.23 5.49 4.40 7.65 3.08 1.00 1.00 1.00 1.00 1.00 1.00 0.98 1.00 0.92 1.00 1.00 
  128 3.59 3.47 2.77 2.14 2.82 2.57 2.89 1.60 4.12 3.19 3.43 2.98 3.17 1.00 0.97 1.00 1.00 1.00 1.02 1.02 1.01 1.00 1.00 1.04 
  181 1.97 4.10 2.37 3.44 1.95 2.42 3.24 2.56 4.20 3.00 4.40 3.27 3.27 1.00 1.00 1.00 1.00 1.03 1.00 1.00 1.00 1.00 1.00 1.03 
  256 4.52 2.25 2.44 1.91 3.28 1.50 3.00 2.68 4.32 3.92 4.00 3.62 3.90 0.98 1.00 0.94 1.04 1.02 1.02 1.02 1.00 1.00 1.04 0.97 
  362 4.15 2.12 2.62 2.56 2.60 1.36 3.29 2.59 4.24 4.00 3.67 3.33 3.60 1.00 1.00 1.06 1.03 1.02 1.03 1.00 1.07 1.00 1.03 1.00 
  512 2.44 4.33 3.23 1.95 2.10 3.45 1.84 1.86 5.26 3.92 3.85 2.95 3.80 1.00 0.92 0.94 1.00 1.00 1.00 0.83 1.14 1.00 1.00 0.98 
  724 3.86 3.53 4.20 2.00 1.57 2.58 2.15 1.93 3.58 3.56 9.99 3.40 3.25 1.00 1.00 1.06 1.03 1.00 1.00 1.09 1.06 1.00 1.03 1.04 
 1024 3.00 2.64 2.48 2.33 2.70 2.40 2.35 1.82 3.97 6.88 4.23 3.00 3.00 1.00 0.92 1.00 1.00 1.02 1.00 1.00 1.06 1.00 1.03 1.02 
 1448 2.28 3.08 2.06 2.86 3.00 2.45 2.43 2.68 4.49 3.62 3.87 3.10 3.36 1.00 1.09 1.00 1.03 0.89 1.23 1.00 0.95 1.00 1.00 1.02 
 2048 2.46 3.69 2.67 3.75 3.16 2.36 2.10 2.52 4.20 3.43 3.94 3.10 3.25 1.00 1.00 1.00 1.03 1.02 1.01 1.00 1.00 1.08 1.02 1.03 
 2896 4.19 2.47 2.32 2.22 2.15 2.16 1.81 2.47 4.38 3.27 3.93 3.23 3.08 1.03 1.00 1.00 1.07 1.00 1.00 1.09 1.00 1.04 1.02 1.03 
 4096 2.11 2.85 2.32 2.93 2.04 3.44 2.89 2.23 4.02 4.45 4.76 3.48 3.25 1.00 1.00 1.00 1.00 0.98 1.00 1.09 0.95 1.00 1.05 1.02 
bitsB = bitsQ = 10000

lenB \ lenQ
         1    2    3    4    6    8   11   16   23   32   45   64   91  128  181  256  362  512  724 1024 1448 2048 2896 4096 
    1 4.31 6.82 3.00 4.40 3.33 2.81 4.13 3.33 3.83 5.33 4.21 3.82 3.19 4.32 3.42 3.50 4.31 3.68 3.28 3.60 3.52 2.53 4.13 3.49 
    2 3.94 5.16 9.99 3.01 1.68 1.88 2.52 2.04 3.46 2.40 2.60 2.55 2.39 2.50 1.64 2.26 2.15 1.81 2.26 2.31 1.89 2.58 1.80 5.80 
    3 6.00 7.33 2.76 6.36 1.63 2.76 2.14 2.76 1.38 2.31 1.69 4.42 3.82 1.85 1.30 4.68 1.31 1.69 1.53 1.94 1.83 1.71 1.81 1.64 
    4 4.55 2.88 3.03 5.00 2.30 2.86 2.22 1.55 1.50 2.00 1.83 1.90 2.19 1.33 2.13 1.20 4.64 1.82 4.92 4.28 1.85 2.00 1.61 1.42 
    6 7.55 9.99 2.10 4.60 1.53 2.82 1.92 3.23 1.73 1.52 1.61 1.28 1.43 1.32 1.70 1.28 1.37 1.30 1.77 1.93 1.20 1.33 1.14 1.47 
    8 7.31 2.44 2.63 3.07 3.27 1.94 2.08 1.93 1.81 1.74 1.69 1.42 1.36 1.52 1.08 1.18 2.00 1.19 1.31 1.20 1.14 1.21 1.26 1.11 
   11 4.62 3.17 2.16 8.70 3.04 3.18 2.46 2.46 2.24 1.44 1.50 1.69 1.61 1.19 1.30 1.26 1.21 1.25 1.30 1.25 1.31 1.20 1.29 1.06 
   16 3.03 2.64 5.00 2.78 2.42 2.65 3.39 2.60 1.90 2.41 1.30 1.40 1.22 1.12 1.25 1.14 1.00 1.09 1.27 1.24 1.56 1.12 0.96 1.12 
   23 3.06 8.00 4.92 4.29 3.56 1.70 1.89 2.62 3.05 2.41 1.40 1.19 3.08 1.02 1.01 0.92 1.00 0.96 1.03 0.82 1.03 1.00 0.99 1.00 
   32 2.13 8.46 5.83 4.11 3.06 2.68 2.24 2.36 2.59 2.63 1.91 1.74 1.02 1.01 1.00 0.94 1.09 1.03 1.00 0.98 1.00 0.98 1.00 1.00 
   45 6.19 8.13 3.47 2.73 2.24 2.89 2.33 1.83 2.36 2.00 2.00 1.54 1.23 1.00 1.08 0.94 1.00 1.00 1.00 1.00 1.00 1.00 1.01 1.00 
   64 1.80 2.73 5.75 2.41 3.50 3.33 2.55 3.64 2.50 3.75 1.67 1.50 1.32 1.10 1.00 1.03 1.00 1.00 1.02 1.03 1.02 1.01 1.00 1.01 
   91 2.00 1.88 7.27 4.03 2.42 2.17 2.03 2.00 2.95 2.50 2.00 1.86 1.21 1.22 1.08 1.10 1.07 1.03 1.04 1.01 1.00 1.00 1.00 1.01 
  128 2.17 5.50 4.20 2.58 2.94 2.06 2.19 2.50 2.41 2.03 2.00 1.54 1.22 0.99 1.07 1.08 1.06 1.00 1.01 1.00 1.01 1.01 1.00 1.01 
  181 2.46 5.61 2.77 2.73 3.05 2.94 2.55 2.06 2.41 2.22 1.40 1.82 1.23 1.10 0.94 1.08 1.00 1.04 1.01 1.02 1.01 1.01 1.00 1.01 
  256 3.56 4.05 2.92 3.68 3.00 2.00 2.42 2.40 2.79 3.06 1.83 1.69 1.28 1.00 1.00 0.96 0.98 0.98 1.00 1.00 1.01 1.00 0.99 1.00 
  362 1.77 5.67 2.32 3.36 2.44 3.25 2.50 3.96 2.67 2.27 1.83 1.50 1.23 1.04 0.94 1.00 1.02 1.04 0.99 1.03 1.00 1.00 1.00 0.99 
  512 2.83 4.44 2.82 4.48 2.65 4.69 3.44 2.27 2.30 2.50 1.85 1.61 1.30 0.91 1.00 1.00 1.02 1.02 1.00 1.01 0.99 1.01 1.00 1.00 
  724 2.50 2.59 4.19 3.19 4.37 5.19 3.19 2.29 2.05 2.19 2.02 1.72 1.18 1.03 1.06 1.00 1.00 1.03 1.02 0.99 1.03 0.99 1.01 1.00 
 1024 4.52 6.54 1.30 4.39 2.43 5.19 2.68 2.08 2.04 2.14 1.46 1.65 1.44 1.00 1.06 1.00 1.03 1.02 1.01 1.01 1.00 1.01 1.00 1.00 
 1448 1.92 1.79 2.70 1.93 2.70 2.73 3.09 2.23 2.13 2.00 1.83 1.68 1.28 1.10 1.07 1.04 1.03 1.02 1.01 1.02 1.01 1.01 1.00 1.00 
 2048 1.81 4.93 9.99 2.90 2.53 3.03 2.65 2.27 2.52 2.75 1.82 1.32 1.17 1.03 0.93 1.04 1.02 1.02 1.02 1.01 1.00 1.01 0.99 1.02 
 2896 1.86 3.12 2.77 3.55 2.44 2.50 1.47 2.70 2.58 2.37 2.10 1.70 1.32 1.00 1.07 0.96 1.05 1.03 1.00 1.00 1.05 1.01 1.01 1.00 
 4096 1.91 4.14 4.04 4.92 3.93 2.65 2.19 2.31 2.44 2.41 1.85 1.68 1.13 1.10 1.00 1.04 1.03 0.98 0.99 1.01 1.00 1.00 1.00 0.98 
bitsB = bitsQ = 100000

lenB \ lenQ
         1    2    3    4    6    8   11   16   23   32   45   64   91  128  181  256  362  512 
    1 1.55 1.79 1.88 1.93 1.80 2.13 2.81 2.00 2.17 2.34 1.88 2.67 2.11 2.00 2.61 1.95 2.79 1.84 
    2 4.14 2.77 1.75 2.06 2.97 3.17 1.95 1.86 1.69 2.48 1.45 2.76 2.41 1.47 1.67 2.10 1.77 1.89 
    3 1.12 1.54 3.60 1.83 3.55 1.60 1.56 1.50 1.88 1.76 1.90 1.89 1.73 1.21 2.53 1.66 1.65 2.67 
    4 1.27 2.19 3.87 2.78 2.86 2.08 2.60 2.08 1.97 1.58 1.07 1.33 1.26 1.82 1.29 1.40 1.04 1.40 
    6 1.40 2.00 1.86 1.49 1.71 1.33 1.26 1.94 1.64 1.73 1.78 1.50 1.56 1.22 1.42 1.24 1.38 1.96 
    8 1.28 3.77 1.60 2.37 3.24 2.54 2.22 2.21 1.22 1.40 1.53 1.32 1.36 1.18 1.29 1.30 1.22 1.13 
   11 9.99 1.82 4.56 2.44 2.08 2.00 2.64 1.93 2.39 1.36 1.55 1.50 1.20 1.18 1.10 1.33 1.07 1.19 
   16 9.99 3.45 3.43 2.27 2.14 2.27 2.06 2.03 2.71 2.18 1.58 1.47 1.22 1.36 1.19 1.29 1.10 1.13 
   23 2.70 0.87 2.84 2.21 2.61 2.18 2.39 2.34 1.80 2.88 1.32 2.00 0.89 1.02 0.99 1.00 1.01 1.00 
   32 1.68 2.80 1.85 2.71 3.60 3.33 2.42 2.14 2.34 3.54 1.62 1.47 1.09 0.99 1.01 1.01 1.00 1.00 
   45 2.23 2.29 1.97 2.19 2.15 2.00 1.75 1.25 2.00 2.59 1.48 1.75 0.90 1.01 1.02 1.00 1.00 1.00 
   64 1.33 2.00 2.16 1.82 2.07 1.64 1.73 2.13 2.14 1.87 1.47 1.30 1.08 1.00 1.00 1.00 0.99 0.99 
   91 1.38 2.12 3.10 1.70 3.09 2.27 2.11 2.00 2.20 1.88 1.52 1.30 0.92 1.01 0.99 1.00 0.99 1.00 
  128 1.26 1.75 1.39 1.65 2.82 1.84 1.81 2.08 2.28 1.90 1.50 1.48 1.00 1.01 1.01 1.00 1.00 0.99 
  181 1.42 1.63 2.65 1.90 2.08 2.38 1.41 2.31 1.94 2.00 1.50 1.36 1.03 1.01 1.00 1.01 1.00 1.00 
  256 2.14 1.78 2.45 2.00 1.67 2.05 1.91 2.50 1.98 1.67 1.52 1.34 1.00 0.99 1.00 0.99 0.99 1.01 
  362 1.95 2.86 3.25 2.68 2.73 2.00 2.36 2.02 2.50 1.86 4.12 1.29 0.88 1.00 1.00 0.98 0.99 1.00 
  512 1.00 1.98 2.03 1.69 2.36 3.76 2.37 1.83 2.22 1.73 1.24 1.25 1.06 0.99 1.00 1.00 0.98 1.00 

Three calls with random number of bitsB and bitsQ between 1 and 100000 bits (thus generating unbalanced operands).


lenB \ lenQ
         1    2    3    4    6    8   11   16   23   32   45   64   91  128  181  256  362  512  724 1024 1448 2048 2896 4096 
    1 4.50 4.93 5.62 3.46 9.99 9.99 9.99 9.99 9.31 2.65 9.99 9.99 9.99 3.79 2.75 9.99 3.41 9.99 8.04 9.99 9.99 7.27 3.43 9.99 
    1 3.49 3.25 3.09 3.73 6.36 8.00 8.33 4.40 3.15 4.38 9.99 2.52 9.99 3.44 9.99 3.25 9.74 3.68 2.25 9.99 3.00 1.67 9.99 9.99 
    1 9.99 9.99 9.99 2.45 3.25 4.38 4.68 3.85 9.25 6.39 9.99 4.26 5.45 9.99 2.75 9.99 9.99 3.10 9.99 4.88 6.67 9.99 2.33 1.72 

    2 5.05 5.31 2.79 5.88 2.38 1.87 1.70 2.00 2.92 2.17 1.82 4.58 3.45 2.75 1.87 1.55 2.60 1.83 7.08 1.98 5.48 4.55 2.71 2.24 
    2 4.78 1.60 5.50 3.60 1.75 5.36 3.06 4.53 2.87 2.26 4.81 2.68 2.65 6.44 2.31 2.09 1.97 6.67 1.32 7.14 2.30 2.43 2.19 2.50 
    2 4.30 4.88 2.14 5.83 2.93 3.06 2.29 3.23 6.33 2.50 2.08 4.07 5.94 5.56 1.83 2.78 1.72 2.79 1.88 2.86 1.83 1.52 1.75 3.90 

    3 3.64 3.00 2.00 9.99 2.00 1.83 3.30 5.35 2.03 3.17 2.62 3.50 8.11 1.77 1.50 1.42 1.71 1.59 1.64 1.77 7.55 1.75 2.38 1.93 
    3 2.97 2.07 2.09 2.54 3.57 2.46 2.29 2.00 1.57 1.51 3.00 4.00 2.50 1.82 1.43 3.26 4.17 1.73 2.53 4.91 1.88 1.70 1.46 2.76 
    3 4.50 2.61 3.78 1.27 1.93 2.69 3.79 9.99 2.83 2.73 2.64 5.39 2.46 6.00 2.27 7.22 2.59 2.22 2.88 1.77 1.36 3.33 3.10 1.24 

    4 1.06 1.94 5.65 1.94 4.94 2.80 2.00 1.25 1.82 2.16 2.12 0.99 1.70 2.39 3.00 2.44 3.33 1.67 1.81 1.21 2.55 1.78 2.00 1.71 
    4 1.25 3.38 2.85 2.88 4.42 2.56 1.62 2.59 1.86 1.69 1.85 1.45 2.00 2.09 2.06 1.71 6.62 5.00 5.26 2.36 1.50 6.23 1.69 2.56 
    4 9.17 4.50 2.00 2.27 4.44 2.00 2.44 2.00 1.55 1.90 1.45 0.97 1.38 1.83 1.94 2.59 1.48 2.09 2.60 1.21 2.21 1.70 2.69 1.70 

    6 9.99 2.21 1.42 6.13 2.14 3.41 4.39 2.42 1.15 2.00 2.14 2.62 1.52 2.14 1.79 1.89 1.95 1.91 2.55 1.15 1.71 1.26 1.84 1.97 
    6 1.52 2.56 3.05 3.64 2.36 3.67 2.41 1.55 1.89 1.82 1.77 2.95 1.60 2.04 2.14 2.20 2.63 1.38 1.37 1.24 1.71 1.88 1.50 2.06 
    6 4.40 2.93 5.38 2.07 1.64 3.47 3.13 2.00 2.41 1.97 1.60 2.31 1.83 1.89 1.93 1.69 1.59 1.70 1.52 1.64 1.51 1.45 1.32 1.35 

    8 9.99 9.99 9.99 2.58 1.46 1.89 3.56 3.15 1.44 1.67 1.25 1.57 3.03 1.74 1.27 2.94 2.77 1.75 2.87 1.19 2.37 1.76 1.14 3.57 
    8 9.99 3.11 2.18 2.37 1.80 1.78 2.47 1.47 3.53 4.60 3.67 1.80 1.67 2.07 1.91 1.80 1.35 1.88 1.55 1.57 1.61 2.10 1.50 1.44 
    8 2.69 2.50 3.00 6.76 2.50 1.27 2.86 1.21 1.44 1.76 1.80 8.80 1.67 1.84 1.35 3.00 1.52 1.21 2.00 1.93 1.41 1.58 1.46 1.74 

   11 1.74 3.45 2.77 2.96 1.28 1.61 2.12 3.00 2.78 1.33 2.26 2.95 2.39 1.44 2.15 1.50 2.24 2.09 1.80 2.17 1.80 1.29 1.83 1.68 
   11 5.13 9.99 3.01 4.17 1.55 2.48 1.22 2.33 2.33 3.33 1.61 1.25 2.24 1.35 2.00 2.71 1.63 2.44 9.99 1.20 1.23 1.35 1.40 1.32 
   11 5.33 2.22 1.64 2.07 2.04 1.53 1.96 2.43 2.67 3.87 3.54 2.00 1.71 1.40 1.53 1.56 1.32 1.86 1.71 1.36 1.26 1.67 0.91 1.91 

   16 2.98 3.44 1.58 2.00 2.21 2.08 1.09 1.87 1.14 2.73 3.79 2.13 2.05 2.17 1.94 1.44 1.44 1.47 1.41 1.51 2.50 2.03 1.27 1.49 
   16 2.17 2.18 1.63 4.00 1.20 2.15 1.50 2.30 2.27 2.58 1.67 1.57 1.88 2.35 2.31 1.16 1.27 1.10 2.64 1.60 1.16 2.10 1.40 1.31 
   16 4.55 5.91 8.57 3.75 2.35 4.60 1.90 1.91 1.94 3.42 3.25 4.19 9.99 1.78 1.31 2.95 2.20 1.98 1.26 2.03 1.47 1.67 0.89 1.40 

   23 3.17 3.01 1.64 1.48 1.63 2.26 2.26 1.39 1.47 4.58 2.73 1.40 9.99 4.33 2.63 1.26 7.45 5.91 2.17 4.02 3.00 2.35 0.95 9.99 
   23 6.43 3.14 6.36 2.27 1.91 2.14 2.59 1.97 2.21 7.78 9.99 0.94 1.82 3.25 1.09 1.00 3.11 4.06 2.32 1.00 3.21 3.08 9.99 1.00 
   23 2.50 9.99 1.60 1.44 1.46 1.64 2.88 1.77 9.99 4.06 1.84 2.10 9.99 4.35 1.82 5.12 3.68 3.95 1.08 1.90 0.67 1.17 1.05 4.69 

   32 1.35 1.95 2.64 2.00 2.04 2.59 1.25 2.35 9.99 5.00 9.99 9.99 1.07 1.00 3.94 1.70 1.00 4.50 2.42 0.69 1.74 1.44 0.83 5.31 
   32 3.49 2.79 2.63 2.94 1.22 2.09 2.84 3.00 5.00 3.56 8.70 6.58 5.64 1.89 2.75 1.10 9.99 1.50 1.96 7.31 3.73 4.30 1.11 1.03 
   32 3.74 1.83 2.53 2.38 1.79 1.58 2.32 1.63 1.71 1.86 1.73 9.99 3.85 1.29 1.05 3.78 2.11 1.95 1.68 1.00 3.13 0.99 1.08 0.44 

   45 2.20 1.77 9.99 2.34 2.40 1.15 2.12 2.67 4.18 5.14 9.99 5.37 1.21 1.36 2.25 4.14 1.02 1.84 9.99 1.00 1.00 9.99 0.97 2.23 
   45 4.25 1.73 4.00 2.64 2.68 3.30 1.45 1.82 6.39 2.50 9.99 1.68 3.62 1.01 1.56 1.07 3.28 5.38 0.98 1.00 1.77 8.73 0.52 1.79 
   45 3.57 2.29 1.64 2.05 2.54 2.38 2.24 2.26 1.18 9.99 7.69 2.38 9.99 3.67 1.60 1.00 2.28 1.00 2.05 1.00 5.24 1.02 4.00 2.32 

   64 3.18 4.55 2.69 2.50 3.56 2.83 1.98 1.14 6.37 9.99 1.69 2.17 2.67 9.99 5.44 1.00 1.00 5.45 5.48 1.00 6.97 1.08 1.00 4.04 
   64 2.92 1.94 9.99 2.16 1.61 1.53 1.94 3.14 1.11 9.67 6.32 2.17 9.76 1.53 1.00 1.03 1.00 1.00 1.00 1.00 1.00 0.94 1.00 0.88 
   64 4.40 2.00 1.94 3.06 1.65 2.00 1.97 2.29 5.20 9.99 8.00 6.55 9.99 5.45 1.00 1.00 1.00 1.00 1.00 1.03 1.00 0.96 8.52 2.98 

   91 5.17 3.12 2.71 1.31 2.00 1.00 0.95 2.36 5.26 1.64 3.15 2.06 2.10 3.75 1.01 0.99 0.94 1.02 0.99 1.00 5.00 0.98 1.00 0.98 
   91 4.71 2.21 2.20 1.77 1.72 2.03 2.27 1.54 3.12 1.82 9.99 9.99 9.20 5.00 8.64 1.07 1.03 1.00 0.93 1.08 0.98 1.00 1.00 0.94 
   91 2.20 2.31 5.00 4.67 3.33 2.57 2.04 2.28 2.00 4.50 9.99 2.79 1.80 1.10 7.91 1.02 1.04 0.97 1.00 1.01 0.98 4.00 8.52 0.98 

  128 4.90 2.93 2.21 2.89 2.27 3.67 0.56 1.26 1.64 9.99 9.99 1.80 9.99 1.00 1.01 1.02 0.92 1.02 0.97 1.00 1.03 1.04 1.06 1.01 
  128 2.95 3.89 1.91 1.67 1.71 1.49 1.35 2.81 5.00 1.94 9.99 1.20 6.71 0.97 1.05 1.00 1.00 1.00 1.00 1.02 1.00 0.98 0.97 1.00 
  128 1.33 9.99 7.50 1.35 2.47 1.70 3.11 2.78 1.55 2.43 4.55 1.39 2.10 1.01 2.98 1.00 4.23 0.97 0.95 1.00 1.00 1.00 0.95 1.00 

  181 4.25 2.20 6.38 2.62 2.40 1.69 2.12 2.04 9.99 9.99 2.30 7.50 9.99 4.21 1.00 1.03 1.00 1.00 1.03 1.00 1.00 0.96 1.23 0.99 
  181 3.17 2.50 2.56 9.99 2.19 1.86 1.57 2.46 9.99 3.14 1.55 6.92 9.99 1.00 2.46 1.08 0.97 1.01 0.99 1.00 1.01 0.97 0.98 1.00 
  181 1.78 2.70 2.94 1.46 2.03 1.67 4.20 0.75 9.99 2.20 6.67 5.16 3.25 1.47 1.73 0.98 0.93 1.00 1.00 0.99 1.01 1.00 1.01 1.00 

  256 2.77 3.06 2.18 1.50 1.96 1.42 2.08 1.90 9.99 2.54 9.99 9.99 1.29 9.99 3.48 1.00 1.00 1.00 1.01 1.00 1.00 1.00 0.97 0.98 
  256 2.50 8.18 5.20 2.26 2.39 2.16 2.77 2.12 2.54 6.29 4.44 2.00 9.99 1.00 1.54 1.00 1.02 1.02 1.09 1.00 1.04 1.03 1.00 1.03 
  256 3.66 1.59 3.00 2.22 1.89 1.80 2.15 1.42 2.68 4.00 9.72 9.99 1.76 1.52 1.13 0.99 1.00 0.98 1.02 1.00 1.00 1.00 1.00 0.95 

  362 3.24 2.90 3.08 1.87 1.28 1.75 2.00 4.42 1.80 9.99 2.18 4.09 9.99 1.22 9.99 1.00 0.95 1.00 0.97 1.03 1.00 0.99 1.02 1.02 
  362 4.50 2.10 2.08 1.42 2.37 1.67 1.94 2.55 9.99 4.75 9.52 4.46 3.63 3.45 5.83 1.00 0.96 1.07 0.99 1.00 0.96 0.99 1.00 0.95 
  362 3.41 3.33 1.61 8.82 1.45 3.98 2.36 2.62 7.44 4.43 9.99 7.90 9.99 1.47 9.99 1.00 1.06 1.00 1.13 1.08 1.00 1.14 1.03 0.79 

  512 4.39 1.81 1.85 4.60 1.43 2.50 1.93 2.14 9.20 3.54 3.49 9.99 4.95 1.01 1.00 0.95 0.93 1.03 1.02 1.03 1.05 0.96 1.28 0.95 
  512 4.49 9.99 3.66 2.93 2.74 1.83 3.53 1.93 7.31 9.99 9.99 9.99 9.99 9.30 2.50 3.71 0.94 0.98 1.00 1.00 1.06 1.02 1.00 1.12 
  512 5.53 3.23 5.30 1.68 1.76 2.00 1.69 2.96 9.99 3.87 9.99 6.57 2.59 9.99 4.24 1.06 1.07 0.97 1.02 1.00 0.94 1.17 1.00 1.03 

  724 2.75 1.83 2.07 1.90 1.11 1.54 1.60 2.91 1.93 5.59 9.99 9.99 2.25 4.58 1.90 1.00 1.04 1.00 1.00 1.04 1.00 1.10 1.02 1.00 
  724 9.99 2.29 1.66 2.82 1.50 3.00 1.83 1.62 3.53 5.21 1.49 9.99 2.30 1.00 1.04 1.00 1.01 1.00 1.00 1.02 1.00 1.04 1.03 1.00 
  724 3.44 2.40 3.46 3.08 1.87 1.82 2.03 1.27 4.53 5.86 1.64 2.22 9.99 1.00 5.88 1.00 1.00 1.01 1.04 1.00 1.00 1.00 1.03 0.99 

 1024 4.25 1.77 2.64 2.95 1.20 1.69 3.12 1.92 9.99 2.35 2.10 2.35 1.02 1.00 1.00 1.04 0.98 1.06 1.02 1.00 1.00 1.00 1.02 0.98 
 1024 4.04 7.64 4.12 2.36 1.96 2.50 3.09 1.45 2.64 9.99 9.99 2.05 7.73 1.06 1.07 1.04 1.03 1.01 1.00 1.06 0.95 1.02 1.00 1.00 
 1024 1.85 2.13 1.80 4.57 3.52 1.42 2.60 3.27 9.99 9.99 9.99 4.40 9.99 9.99 1.00 1.02 1.00 1.02 1.02 0.93 1.00 1.03 1.10 1.00 

 1448 5.00 1.80 4.10 2.46 1.12 1.85 3.06 1.77 9.99 9.63 9.99 9.99 6.11 1.47 0.95 1.00 1.00 1.00 0.96 1.00 1.04 1.08 1.00 0.98 
 1448 3.00 1.90 2.94 7.74 2.07 2.86 1.89 2.41 8.50 9.99 2.70 1.74 4.84 1.12 9.99 1.02 1.03 1.00 1.09 1.00 1.03 1.07 0.99 1.00 
 1448 4.50 1.68 4.65 5.00 2.70 1.19 2.92 1.00 9.99 9.15 2.00 3.23 6.46 4.45 1.09 0.97 0.97 1.03 1.02 0.92 0.94 1.00 0.99 1.05 

 2048 9.00 3.62 2.57 2.04 2.43 2.45 0.72 1.25 9.99 2.80 4.47 1.28 2.00 1.14 1.77 1.02 1.00 1.00 0.99 0.99 0.95 1.01 1.03 0.99 
 2048 4.50 3.16 2.22 2.00 3.61 2.36 2.07 1.73 5.93 3.75 9.99 1.74 1.49 1.00 1.00 1.03 1.05 0.98 0.91 1.02 1.00 0.97 1.02 1.01 
 2048 4.50 1.84 1.60 1.36 2.23 1.54 2.10 1.97 7.93 1.64 2.55 9.99 9.99 3.18 9.99 1.09 0.98 0.98 1.07 1.00 1.01 1.01 1.16 1.00 

 2896 1.60 3.27 2.47 2.41 1.58 2.89 2.00 1.12 4.00 3.90 1.50 5.10 9.99 0.90 0.97 1.25 1.03 0.99 0.98 1.00 0.99 1.00 1.01 1.00 
 2896 5.93 2.03 9.99 2.12 1.10 1.87 2.05 3.57 9.14 9.71 4.18 1.69 9.09 1.00 1.00 1.00 0.97 0.98 0.96 1.00 0.98 0.99 1.01 1.40 
 2896 1.57 6.15 1.06 2.17 3.78 1.36 3.07 1.78 9.99 2.12 9.99 9.99 7.63 1.08 1.00 1.00 0.97 1.00 1.01 0.93 1.06 1.00 0.98 1.37 

 4096 4.50 2.16 2.73 2.29 2.95 2.47 2.55 1.89 9.99 5.88 9.63 9.99 9.99 2.98 1.00 1.00 1.33 1.00 1.00 0.95 1.03 1.00 1.00 1.16 
 4096 2.12 2.72 2.22 2.44 1.46 2.39 1.82 2.10 8.93 2.12 2.40 1.32 4.80 1.10 1.36 1.00 1.00 1.00 0.94 0.98 0.98 0.98 1.03 1.09 
 4096 4.80 6.58 2.88 2.09 2.73 2.00 1.59 2.32 9.99 9.99 2.17 1.30 5.33 3.00 8.52 4.00 1.01 1.00 1.00 1.04 1.00 1.06 1.00 1.00 

@fredrik-johansson fredrik-johansson merged commit 3f901aa into main Feb 3, 2024
17 checks passed
@fredrik-johansson fredrik-johansson deleted the divexact2 branch February 3, 2024 16:31
@albinahlback
Copy link
Collaborator

Damn, really nice!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants