factor/native/float.h

58 lines
1.3 KiB
C
Raw Normal View History

2004-08-05 16:49:55 -04:00
typedef struct {
CELL header;
2004-08-06 02:51:32 -04:00
/* FIXME */
#ifndef FACTOR_64
CELL alignment;
#endif
2004-08-05 16:49:55 -04:00
double n;
} FLOAT;
INLINE FLOAT* make_float(double n)
{
FLOAT* flo = allot_object(FLOAT_TYPE,sizeof(FLOAT));
flo->n = n;
return flo;
}
INLINE double untag_float_fast(CELL tagged)
{
return ((FLOAT*)UNTAG(tagged))->n;
}
INLINE double untag_float(CELL tagged)
2004-08-05 16:49:55 -04:00
{
type_check(FLOAT_TYPE,tagged);
return untag_float_fast(tagged);
2004-08-05 16:49:55 -04:00
}
void primitive_floatp(void);
FLOAT* to_float(CELL tagged);
void primitive_to_float(void);
2004-08-05 17:33:02 -04:00
void primitive_str_to_float(void);
void primitive_float_to_str(void);
2004-08-06 02:51:32 -04:00
void primitive_float_to_bits(void);
2004-08-05 16:49:55 -04:00
CELL number_eq_float(CELL x, CELL y);
CELL add_float(CELL x, CELL y);
CELL subtract_float(CELL x, CELL y);
CELL multiply_float(CELL x, CELL y);
CELL divide_float(CELL x, CELL y);
CELL divfloat_float(CELL x, CELL y);
CELL less_float(CELL x, CELL y);
CELL lesseq_float(CELL x, CELL y);
CELL greater_float(CELL x, CELL y);
CELL greatereq_float(CELL x, CELL y);
void primitive_facos(void);
void primitive_fasin(void);
void primitive_fatan(void);
void primitive_fatan2(void);
void primitive_fcos(void);
void primitive_fexp(void);
void primitive_fcosh(void);
void primitive_flog(void);
void primitive_fpow(void);
void primitive_fsin(void);
void primitive_fsinh(void);
void primitive_fsqrt(void);