3 BIGNUM* fixnum_to_bignum(CELL n)
5 return bignum((BIGNUM_2)untag_fixnum_fast(n));
8 RATIO* fixnum_to_ratio(CELL n)
10 return ratio(n,tag_fixnum(1));
13 FLOAT* fixnum_to_float(CELL n)
15 return make_float((double)untag_fixnum_fast(n));
18 FIXNUM bignum_to_fixnum(CELL tagged)
20 return (FIXNUM)(((BIGNUM*)UNTAG(tagged))->n);
23 RATIO* bignum_to_ratio(CELL n)
25 return ratio(n,tag_fixnum(1));
28 FLOAT* bignum_to_float(CELL tagged)
30 return make_float((double)((BIGNUM*)UNTAG(tagged))->n);
33 FLOAT* ratio_to_float(CELL tagged)
35 RATIO* r = (RATIO*)UNTAG(tagged);
36 return (FLOAT*)UNTAG(divfloat(r->numerator,r->denominator));
39 void primitive_numberp(void)
41 check_non_empty(env.dt);
43 switch(type_of(env.dt))
57 CELL to_integer(CELL tagged)
61 switch(type_of(tagged))
67 r = (RATIO*)UNTAG(tagged);
68 return divint(r->numerator,r->denominator);
70 type_error(FIXNUM_TYPE,tagged);
71 return NULL; /* can't happen */
75 void primitive_to_integer(void)
77 env.dt = to_integer(env.dt);
81 CELL number_eq_anytype(CELL x, CELL y)
86 /* op */ /* anytype */ /* integer only */
87 BINARY_OP(number_eq, true, false)
88 BINARY_OP(add, false, false)
89 BINARY_OP(subtract, false, false)
90 BINARY_OP(multiply, false, false)
91 BINARY_OP(divide, false, false)
92 BINARY_OP(divint, false, true)
93 BINARY_OP(divfloat, false, false)
94 BINARY_OP(divmod, false, true)
95 BINARY_OP(mod, false, true)
96 BINARY_OP(and, false, true)
97 BINARY_OP(or, false, true)
98 BINARY_OP(xor, false, true)
99 BINARY_OP(shiftleft, false, true)
100 BINARY_OP(shiftright,false, true)
101 BINARY_OP(less, false, false)
102 BINARY_OP(lesseq, false, false)
103 BINARY_OP(greater, false, false)
104 BINARY_OP(greatereq, false, false)