30 return ((x>=0)?floor(x):ceil(x));
70 switch(num1+num2*2+num3*4) {
88 else if (val1!=1.0 && arg2==arg3)
98 else if (val2!=1.0 && arg1==arg3)
133 success=(val3==val1*val2);
165 if (success && arg2) {
177 switch(num1+num2*2+num3*4) {
208 Errorline(
"division by zero in %P.\n",t);
216 Errorline(
"division by zero in %P.\n",t);
221 if (val3==1.0 && arg1!=arg2) {
224 else if (val3!=1.0 && arg1==arg2)
244 Errorline(
"division by zero in %P.\n",t);
252 success=(val3==val1/val2);
255 Errorline(
"division by zero in %P.\n",t);
291 if (success && arg2) {
303 switch(num1+num2*2+num3*4) {
336 Errorline(
"division by zero in %P.\n",t);
346 Errorline(
"division by zero in %P.\n",t);
352 if (val3!=floor(val3))
return FALSE;
353 if (val3==1.0 && arg1!=arg2) {
356 else if (val3!=1.0 && arg1==arg2)
368 if (val3!=floor(val3))
return FALSE;
377 tmp=trunc(val1/val3);
380 else if (val3==trunc(val1/tmp)) {
382 if ((tmp> 1 && val3==trunc(val1/(tmp-1))) ||
383 (tmp< -1 && val3==trunc(val1/(tmp+1))))
399 if (val3!=floor(val3))
return FALSE;
409 Errorline(
"division by zero in %P.\n",t);
420 success=(val3==trunc(val1/val2));
423 Errorline(
"division by zero in %P.\n",t);
460 switch(num1+num3*4) {
471 success=(val3==(floorflag?floor(val1):ceil(val1)));
528 switch(num1+num3*4) {
537 Errorline(
"square root of negative number in %P.\n",t);
544 success=(val3*val3==val1 || (val1>=0 && val3==sqrt(val1)));
545 if (val1<0)
Errorline(
"square root of negative number in %P.\n",t);
581 switch(num1+num3*4) {
586 ans=(trigflag==
SINFLAG?sin(val1):
588 (trigflag==
TANFLAG?tan(val1):0.0)));
592 if (trigflag==
TANFLAG || (val3>= -1 && val3<=1)) {
593 ans=(trigflag==
SINFLAG?asin(val3):
595 (trigflag==
TANFLAG?atan(val3):0.0)));
602 ans=(trigflag==
SINFLAG?asin(val1):
604 (trigflag==
TANFLAG?atan(val1):0.0)));
668 switch(num1+num3*4) {
670 if (arg1==arg3)
return FALSE;
684 success=(val3==val1);
717 if(success && arg2) {
729 switch(num1+num2*2+num3*4) {
766 success=(val3==(
REAL)(((
unsigned long)val1) & ((
unsigned long)val2)));
798 if(success && arg2) {
810 switch(num1+num2*2+num3*4) {
833 success=(val3==(
REAL)(((
unsigned long)val1) | ((
unsigned long)val2)));
868 REAL val1,val2,val3,ans;
878 if(success && arg2) {
890 switch(num1+num2*2+num3*4) {
908 ans=(
REAL)(dir?(
long)val1>>(long)val2:(
long)val1<<(long)val2);
914 ans=(
REAL)(dir?(
long)val1>>(long)val2:(
long)val1<<(long)val2);
945 if(success && arg2) {
957 switch(num1+num2*2+num3*4) {
980 success=(val3==(
REAL)((
unsigned long)val1 % (
unsigned long)val2));
1005 long num1,num2,num3;
1006 REAL val1,val2,val3;
1016 if(success && arg2) {
1028 switch(num1+num2*2+num3*4) {
1032 else if (arg2==arg3)
1073 success=(val3==val1+val2);
1117 long num1,num2,num3;
1118 REAL val1,val2,val3;
1128 if(success && arg2) {
1140 switch(num1+num2*2+num3*4) {
1144 else if (arg1==arg2)
1183 success=(val3==val1-val2);
1192 switch(num1+4*num3) {
1203 success=(val1== -val3);
1236 switch(num1+num3*4) {
1246 (val1==0)?
"zero":
"a negative number",t);
1253 success=(exp(val3)==val1 || (val1>0 && val3==log(val1)));
1256 (val1==0)?
"zero":
"a negative number",t);
1293 switch(num1+num3*4) {
1307 success=(exp(val1)==val3 || (val3>0 && val1==log(val3)));
void new_built_in(ptr_module m, char *s, def_type t, long(*r)())
void get_two_args(ptr_node t, ptr_psi_term *a, ptr_psi_term *b)
void residuate(ptr_psi_term t)
static long c_shift_right()
void push_goal(goals t, ptr_psi_term a, ptr_psi_term b, GENERIC c)
long get_real_value(ptr_psi_term t, REAL *v, long *n)
void nonnum_warning(ptr_psi_term t, ptr_psi_term arg1, ptr_psi_term arg2)
void get_one_arg(ptr_node t, ptr_psi_term *a)
long bit_not_warning(ptr_psi_term arg, REAL val)
static long c_shift_left()
static long c_floor_ceiling(long floorflag)
void Errorline(char *format,...)
void residuate2(ptr_psi_term u, ptr_psi_term v)
long shift_warning(long dir, ptr_psi_term arg, REAL val)
void residuate3(ptr_psi_term u, ptr_psi_term v, ptr_psi_term w)
long bit_or_warning(ptr_psi_term arg, REAL val)
static long c_shift(long)
static long c_trig(long trigflag)
void insert_math_builtins()
long unify_real_result(ptr_psi_term t, REAL v)
long mod_warning(ptr_psi_term arg, REAL val, int zero)
long int_div_warning(ptr_psi_term arg, REAL val)
long bit_and_warning(ptr_psi_term arg, REAL val)