version 1.3, 2000/08/22 05:04:06 |
version 1.4, 2017/09/06 06:25:26 |
|
|
* 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/asir2000/engine/mi.c,v 1.2 2000/08/21 08:31:28 noro Exp $ |
* $OpenXM: OpenXM_contrib2/asir2000/engine/mi.c,v 1.3 2000/08/22 05:04:06 noro Exp $ |
*/ |
*/ |
#include "ca.h" |
#include "ca.h" |
|
|
extern int current_mod; |
extern int current_mod; |
|
|
void addmi(a,b,c) |
void addmi(MQ a,MQ b,MQ *c) |
MQ a,b; |
|
MQ *c; |
|
{ |
{ |
if ( !current_mod ) |
if ( !current_mod ) error("addmi : current_mod is not set"); |
error("addmi : invalid modulus"); |
if ( a && RATN(a) ) ptomp(current_mod,a,&a); |
if ( (a && NID(a) != N_M) || (b && NID(b) != N_M) ) |
if ( b && RATN(b) ) ptomp(current_mod,b,&b); |
error("addmi : invalid argument"); |
if ( (a && !SFF(a)) || b && !SFF(b) ) error("addmi : invalid argument"); |
addmq(current_mod,a,b,c); |
addmq(current_mod,a,b,c); |
} |
} |
|
|
void submi(a,b,c) |
void submi(MQ a,MQ b,MQ *c) |
MQ a,b; |
|
MQ *c; |
|
{ |
{ |
if ( !current_mod ) |
if ( !current_mod ) error("submi : current_mod is not set"); |
error("submi : invalid modulus"); |
if ( a && RATN(a) ) ptomp(current_mod,a,&a); |
if ( (a && NID(a) != N_M) || (b && NID(b) != N_M) ) |
if ( b && RATN(b) ) ptomp(current_mod,b,&b); |
error("submi : invalid argument"); |
if ( (a && !SFF(a)) || b && !SFF(b) ) error("submi : invalid argument"); |
submq(current_mod,a,b,c); |
submq(current_mod,a,b,c); |
} |
} |
|
|
void mulmi(a,b,c) |
void mulmi(MQ a,MQ b,MQ *c) |
MQ a,b; |
|
MQ *c; |
|
{ |
{ |
if ( !current_mod ) |
if ( !current_mod ) error("mulmi : current_mod is not set"); |
error("mulmi : invalid modulus"); |
if ( a && RATN(a) ) ptomp(current_mod,a,&a); |
if ( (a && NID(a) != N_M) || (b && NID(b) != N_M) ) |
if ( b && RATN(b) ) ptomp(current_mod,b,&b); |
error("mulmi : invalid argument"); |
if ( (a && !SFF(a)) || b && !SFF(b) ) error("mulmi : invalid argument"); |
mulmq(current_mod,a,b,c); |
mulmq(current_mod,a,b,c); |
} |
} |
|
|
void divmi(a,b,c) |
void divmi(MQ a,MQ b,MQ *c) |
MQ a,b; |
|
MQ *c; |
|
{ |
{ |
if ( !current_mod ) |
if ( !current_mod ) error("divmi : current_mod is not set"); |
error("divmi : invalid modulus"); |
if ( a && RATN(a) ) ptomp(current_mod,a,&a); |
if ( (a && NID(a) != N_M) || (b && NID(b) != N_M) ) |
if ( b && RATN(b) ) ptomp(current_mod,b,&b); |
error("divmi : invalid argument"); |
if ( (a && !SFF(a)) || b && !SFF(b) ) error("divmi : invalid argument"); |
divmq(current_mod,a,b,c); |
divmq(current_mod,a,b,c); |
} |
} |
|
|
void chsgnmi(a,c) |
void chsgnmi(MQ a,MQ *c) |
MQ a,*c; |
|
{ |
{ |
if ( !current_mod ) |
if ( !current_mod ) error("chsgnmi : current_mod is not set"); |
error("chsgnmi : invalid modulus"); |
if ( a && RATN(a) ) ptomp(current_mod,a,&a); |
if ( a && NID(a) != N_M ) |
if ( a && !SFF(a) ) error("chsgnmi : invalid argument"); |
error("chsgnmi : invalid argument"); |
submq(current_mod,0,a,c); |
submq(current_mod,0,a,c); |
|
} |
} |
|
|
void pwrmi(a,b,c) |
void pwrmi(MQ a,Q b,MQ *c) |
MQ a; |
|
Q b; |
|
MQ *c; |
|
{ |
{ |
if ( !current_mod ) |
if ( !current_mod ) error("pwrnmi : current_mod is not set"); |
error("pwrmi : invalid modulus"); |
if ( a && RATN(a) ) ptomp(current_mod,a,&a); |
if ( a && NID(a) != N_M ) |
if ( a && !SFF(a) ) error("pwrmi : invalid argument"); |
error("pwrmi : invalid argument"); |
pwrmq(current_mod,a,b,c); |
pwrmq(current_mod,a,b,c); |
|
} |
} |
|
|
int cmpmi(a,b) |
int cmpmi(MQ a,MQ b) |
MQ a,b; |
|
{ |
{ |
int c; |
int c; |
|
|
if ( !current_mod ) |
if ( !current_mod ) error("cmpmi : current_mod is not set"); |
error("cmpmi : invalid modulus"); |
if ( a && RATN(a) ) ptomp(current_mod,a,&a); |
if ( (a && NID(a) != N_M) || (b && NID(b) != N_M) ) |
if ( b && RATN(b) ) ptomp(current_mod,b,&b); |
error("cmpmi : invalid argument"); |
if ( (a && !SFF(a)) || b && !SFF(b) ) error("cmpmi : invalid argument"); |
if ( !a ) |
if ( !a ) return !b ? 0 : -1; |
if ( !b ) |
else if ( !b ) return 1; |
return 0; |
else { |
else |
c = CONT(a)-CONT(b); |
return CONT(b) < 0; |
return c==0 ? 0 : c>0; |
else |
} |
if ( !b ) |
|
return CONT(a) > 0; |
|
else { |
|
c = CONT(a)-CONT(b); |
|
if ( c % current_mod ) |
|
return c > 0; |
|
else |
|
return 0; |
|
} |
|
} |
} |