version 1.8, 2020/10/06 06:31:19 |
version 1.10, 2022/01/13 08:15:02 |
|
|
* DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE, |
* DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE, |
* PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE. |
* PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE. |
* |
* |
* $OpenXM: OpenXM_contrib2/asir2018/builtin/array.c,v 1.7 2020/01/09 01:47:40 noro Exp $ |
* $OpenXM: OpenXM_contrib2/asir2018/builtin/array.c,v 1.9 2021/03/26 09:05:41 ohara Exp $ |
*/ |
*/ |
#include "ca.h" |
#include "ca.h" |
#include "base.h" |
#include "base.h" |
Line 622 void Pnewvect(NODE arg,VECT *rp) |
|
Line 622 void Pnewvect(NODE arg,VECT *rp) |
|
return; |
return; |
} |
} |
#endif |
#endif |
for ( i = 0, tn = BDY(list), vb = BDY(vect); tn; i++, tn = NEXT(tn) ) |
for ( i = 0, tn = BDY(list), vb = BDY(vect); tn && i<len; i++, tn = NEXT(tn) ) |
vb[i] = (pointer)BDY(tn); |
vb[i] = (pointer)BDY(tn); |
} |
} |
*rp = vect; |
*rp = vect; |
Line 1250 void Pgeneric_gauss_elim_mod64(NODE arg,LIST *rp) |
|
Line 1250 void Pgeneric_gauss_elim_mod64(NODE arg,LIST *rp) |
|
Z q; |
Z q; |
mp_limb_t md; |
mp_limb_t md; |
int i,j,k,l,row,col,t,rank; |
int i,j,k,l,row,col,t,rank; |
|
Obj val; |
|
int asis = 0; |
|
|
asir_assert(ARG0(arg),O_MAT,"generic_gauss_elim_mod64"); |
asir_assert(ARG0(arg),O_MAT,"generic_gauss_elim_mod64"); |
asir_assert(ARG1(arg),O_N,"generic_gauss_elim_mod64"); |
asir_assert(ARG1(arg),O_N,"generic_gauss_elim_mod64"); |
|
if ( get_opt("asis",&val) && val ) asis = 1; |
m = (MAT)ARG0(arg); md = ZTOS((Z)ARG1(arg)); |
m = (MAT)ARG0(arg); md = ZTOS((Z)ARG1(arg)); |
row = m->row; col = m->col; tmat = (Z **)m->body; |
row = m->row; col = m->col; tmat = (Z **)m->body; |
wmat = (mp_limb_t **)almat64(row,col); |
wmat = (mp_limb_t **)almat64(row,col); |
Line 1265 void Pgeneric_gauss_elim_mod64(NODE arg,LIST *rp) |
|
Line 1268 void Pgeneric_gauss_elim_mod64(NODE arg,LIST *rp) |
|
for ( j = 0; j < col; j++ ) |
for ( j = 0; j < col; j++ ) |
wmat[i][j] = remqi64((Q)tmat[i][j],md); |
wmat[i][j] = remqi64((Q)tmat[i][j],md); |
rank = generic_gauss_elim_mod64(wmat,row,col,md,colstat); |
rank = generic_gauss_elim_mod64(wmat,row,col,md,colstat); |
|
if ( asis ) { |
|
MKMAT(mat,row,col); |
|
tmat = (Z **)mat->body; |
|
for ( i = 0; i < rank; i++ ) |
|
for ( j = 0; j < col; j++ ) { |
|
UTOZ(wmat[i][j],tmat[i][j]); |
|
} |
|
*rp = (LIST)mat; |
|
return; |
|
} |
|
|
MKVECT(rnum,rank); |
MKVECT(rnum,rank); |
rnb = (Z *)rnum->body; |
rnb = (Z *)rnum->body; |
Line 1307 void Pgeneric_gauss_elim_mod(NODE arg,LIST *rp) |
|
Line 1320 void Pgeneric_gauss_elim_mod(NODE arg,LIST *rp) |
|
Z q; |
Z q; |
long mdl; |
long mdl; |
int md,i,j,k,l,row,col,t,rank; |
int md,i,j,k,l,row,col,t,rank; |
|
Obj val; |
|
int asis = 0; |
|
|
asir_assert(ARG0(arg),O_MAT,"generic_gauss_elim_mod"); |
asir_assert(ARG0(arg),O_MAT,"generic_gauss_elim_mod"); |
asir_assert(ARG1(arg),O_N,"generic_gauss_elim_mod"); |
asir_assert(ARG1(arg),O_N,"generic_gauss_elim_mod"); |
|
if ( get_opt("asis",&val) && val ) asis = 1; |
#if SIZEOF_LONG==8 |
#if SIZEOF_LONG==8 |
mdl = ZTOS((Z)ARG1(arg)); |
mdl = ZTOS((Z)ARG1(arg)); |
if ( mdl >= ((mp_limb_t)1)<<32 ) { |
if ( mdl >= ((mp_limb_t)1)<<32 ) { |
Line 1330 void Pgeneric_gauss_elim_mod(NODE arg,LIST *rp) |
|
Line 1346 void Pgeneric_gauss_elim_mod(NODE arg,LIST *rp) |
|
for ( j = 0; j < col; j++ ) |
for ( j = 0; j < col; j++ ) |
wmat[i][j] = remqi((Q)tmat[i][j],md); |
wmat[i][j] = remqi((Q)tmat[i][j],md); |
rank = generic_gauss_elim_mod(wmat,row,col,md,colstat); |
rank = generic_gauss_elim_mod(wmat,row,col,md,colstat); |
|
if ( asis ) { |
|
MKMAT(mat,row,col); |
|
tmat = (Z **)mat->body; |
|
for ( i = 0; i < rank; i++ ) |
|
for ( j = 0; j < col; j++ ) { |
|
UTOZ(wmat[i][j],tmat[i][j]); |
|
} |
|
*rp = (LIST)mat; |
|
return; |
|
} |
|
|
MKVECT(rnum,rank); |
MKVECT(rnum,rank); |
rnb = (Z *)rnum->body; |
rnb = (Z *)rnum->body; |