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().