3 void primitive_floatp(void)
5 check_non_empty(env.dt);
6 env.dt = tag_boolean(typep(FLOAT_TYPE,env.dt));
9 FLOAT* to_float(CELL tagged)
11 switch(type_of(tagged))
14 return fixnum_to_float(tagged);
16 return bignum_to_float(tagged);
18 return ratio_to_float(tagged);
20 return (FLOAT*)UNTAG(tagged);
22 type_error(FLOAT_TYPE,tagged);
23 return NULL; /* can't happen */
27 void primitive_to_float(void)
29 env.dt = tag_object(to_float(env.dt));
32 CELL number_eq_float(CELL x, CELL y)
34 return tag_boolean(((FLOAT*)UNTAG(x))->n
35 == ((FLOAT*)UNTAG(y))->n);
38 CELL add_float(CELL x, CELL y)
40 return tag_object(make_float(((FLOAT*)UNTAG(x))->n
41 + ((FLOAT*)UNTAG(y))->n));
44 CELL subtract_float(CELL x, CELL y)
46 return tag_object(make_float(((FLOAT*)UNTAG(x))->n
47 - ((FLOAT*)UNTAG(y))->n));
50 CELL multiply_float(CELL x, CELL y)
52 return tag_object(make_float(((FLOAT*)UNTAG(x))->n
53 * ((FLOAT*)UNTAG(y))->n));
56 CELL divide_float(CELL x, CELL y)
58 return tag_object(make_float(((FLOAT*)UNTAG(x))->n
59 / ((FLOAT*)UNTAG(y))->n));
62 CELL divfloat_float(CELL x, CELL y)
64 return tag_object(make_float(((FLOAT*)UNTAG(x))->n
65 / ((FLOAT*)UNTAG(y))->n));
68 CELL less_float(CELL x, CELL y)
70 return tag_boolean(((FLOAT*)UNTAG(x))->n
71 < ((FLOAT*)UNTAG(y))->n);
74 CELL lesseq_float(CELL x, CELL y)
76 return tag_boolean(((FLOAT*)UNTAG(x))->n
77 <= ((FLOAT*)UNTAG(y))->n);
80 CELL greater_float(CELL x, CELL y)
82 return tag_boolean(((FLOAT*)UNTAG(x))->n
83 > ((FLOAT*)UNTAG(y))->n);
86 CELL greatereq_float(CELL x, CELL y)
88 return tag_boolean(((FLOAT*)UNTAG(x))->n
89 >= ((FLOAT*)UNTAG(y))->n);