|
algebramix_doc 0.3
|
#include <crt_naive.hpp>
Definition at line 208 of file crt_naive.hpp.
| typedef implementation<crt_transform,V> Crt |
Definition at line 214 of file crt_naive.hpp.
| typedef S::modulus_base I |
Definition at line 210 of file crt_naive.hpp.
Definition at line 211 of file crt_naive.hpp.
Definition at line 212 of file crt_naive.hpp.
| typedef implementation<vector_linear, vector_naive> Vec |
Definition at line 213 of file crt_naive.hpp.
| crt_naive_transformer | ( | const vector< NV, VV > & | v, |
| bool | lazy = true |
||
| ) | [inline] |
Definition at line 254 of file crt_naive.hpp.
References mmx::C.
: n(N(v)) { l_p= default_aligned_size<M> (n); l_m= default_aligned_size<I> (n); l_q= default_aligned_size<C> (n); p= mmx_formatted_new<M> (l_p, format<M> (/*FIXME*/)); for (nat i= 0; i < n; i++) p[i]= as<M> (v[i]); q= NULL; m= NULL; P= C(1); product_done= false; comoduli_done= false; inverse_done= false; if (! lazy) setup_inverse (); }
| ~crt_naive_transformer | ( | ) | [inline] |
Definition at line 288 of file crt_naive.hpp.
{
setup_comoduli ();
Crt::combine (a, c, q, n); }
| C comodulus | ( | nat | i | ) | [inline] |
Definition at line 280 of file crt_naive.hpp.
{
VERIFY (i < n, "index out of range");
setup_comoduli (); return q[i]; }
Definition at line 292 of file crt_naive.hpp.
| M operator[] | ( | nat | i | ) | const [inline] |
Definition at line 270 of file crt_naive.hpp.
| Modulus product | ( | ) | [inline] |
Definition at line 277 of file crt_naive.hpp.
{
setup_product (); return P; }
| void setup_comoduli | ( | ) | [inline] |
Definition at line 232 of file crt_naive.hpp.
{
if (comoduli_done) return;
setup_product ();
for (nat i= 0; i < n; i++) q[i]= * P / * p[i];
comoduli_done= true; }
| void setup_inverse | ( | ) | [inline] |
Definition at line 238 of file crt_naive.hpp.
{
if (inverse_done) return;
setup_comoduli ();
H= Crt::half (P);
m= mmx_formatted_new<I> (l_m, format<I> (/*FIXME*/));
for (nat i= 0; i < n; i++) {
I a (1), b;
for (nat j= 0; j < n; j++) {
reduce_mod (b, * p[j], p[i]);
if (j != i) mul_mod (a, b, p[i]);
}
inv_mod (m[i], a, p[i]);
ASSERT (m[i] != 0, "moduli must be pairwise coprime"); }
inverse_done= true; }
| void setup_product | ( | ) | [inline] |
Definition at line 225 of file crt_naive.hpp.
{
if (product_done) return;
q= mmx_formatted_new<C> (l_q, format<C> (/*FIXME*/));
for (nat i= 0; i < n; i++) q[i]= * p[i];
P= Vec::template vec_unary_big<mul_op> (q, n);
product_done= true; }
| nat size | ( | ) | const [inline] |
| bool comoduli_done |
Definition at line 223 of file crt_naive.hpp.
Definition at line 220 of file crt_naive.hpp.
Referenced by implementation< matrix_multiply, V, matrix_crt< W > >::mul().
| bool inverse_done |
Definition at line 223 of file crt_naive.hpp.
| nat l_m |
Definition at line 217 of file crt_naive.hpp.
| nat l_p |
Definition at line 217 of file crt_naive.hpp.
| nat l_q |
Definition at line 217 of file crt_naive.hpp.
Definition at line 222 of file crt_naive.hpp.
Referenced by implementation< matrix_multiply, V, matrix_crt< W > >::mul().
| nat n |
Definition at line 216 of file crt_naive.hpp.
Definition at line 219 of file crt_naive.hpp.
Referenced by implementation< matrix_multiply, V, matrix_crt< W > >::mul().
Definition at line 218 of file crt_naive.hpp.
| bool product_done |
Definition at line 223 of file crt_naive.hpp.
Definition at line 221 of file crt_naive.hpp.
Referenced by implementation< matrix_multiply, V, matrix_crt< W > >::mul().