#include "cdefs.h"
#include <math.h>

cint cfloat_as_int(cfloat f){
  union {cint i; cfloat f;} r;
  r.f = f;
  return r.i; 
}

cint cfloat_f_ceil(cint x){
  union {cint i; cfloat f;} r;
  r.i = x; return ceil(r.f);
}

cint cfloat_ff_div(cint x, cint y){
  union {cint i; cfloat f;} r, t;
  r.i = x; t.i = y; r.f /= t.f;
  return r.i;
}

cint cfloat_fi_div(cint x, cint y){
  union {cint i; cfloat f;} r;
  r.i = x; r.f /= y;
  return r.i;
}

cint cfloat_f_fabs(cint x){
  union {cint i; cfloat f;} r;
  r.i = x; r.f = fabs(r.f);
  return r.i;
}

cint cfloat_f_floor(cint x){
  union {cint i; cfloat f;} r;
  r.i = x; return floor(r.f);
}

cint cfloat_f_frac(cint x){
  union {cint i; cfloat f;} r;
  r.i = x; r.f = r.f - (cint)r.f;
  return r.i;
}

cint cfloat_f_int(cint x){
  union {cint i; cfloat f;} r;
  r.i = x; return r.f;
}

cint cfloat_ff_idiv(cint x, cint y){
  union {cint i; cfloat f;} r, t;
  r.i = x; t.i = y;
  return floor(r.f / t.f);
}

cint cfloat_fi_idiv(cint x, cint y){
  union {cint i; cfloat f;} r;
  r.i = x;
  return floor(r.f / y);
}

cint cfloat_if_idiv(cint x, cint y){
  union {cint i; cfloat f;} t;
  t.i = y;
  return floor(x / t.f);
}

cint cfloat_ff_min(cint x, cint y){
  union {cint i; cfloat f;} r, t;
  r.i = x; t.i = y; r.f -= t.f;
  return r.i;
}

cint cfloat_fi_min(cint x, cint y){
  union {cint i; cfloat f;} r;
  r.i = x; r.f -= y;
  return r.i;
}

cint cfloat_ff_mod(cint x, cint y){
  union {cint i; cfloat f;} r, t;
  r.i = x; t.i = y; r.f = r.f - floor(r.f / t.f)*t.f;
  return r.i;
}

cint cfloat_fi_mod(cint x, cint y){
  union {cint i; cfloat f;} r;
  r.i = x; r.f = r.f - floor(r.f / y)*y;
  return r.i;
}

cint cfloat_if_mod(cint x, cint y){
  union {cint i; cfloat f;} r;
  r.i = y; r.f = x - floor(x / r.f)*r.f;
  return r.i;
}

cint cfloat_ff_mul(cint x, cint y){
  union {cint i; cfloat f;} r, t;
  r.i = x; t.i = y; r.f *= t.f;
  return r.i;
}

cint cfloat_fi_mul(cint x, cint y){
  union {cint i; cfloat f;} r;
  r.i = x; r.f *= y;
  return r.i;
}

cint cfloat_ff_plus(cint x, cint y){
  union {cint i; cfloat f;} r, t;
  r.i = x; t.i = y; r.f += t.f;
  return r.i;
}

cint cfloat_fi_plus(cint x, cint y){
  union {cint i; cfloat f;} r;
  r.i = x; r.f += y;
  return r.i;
}

cint cfloat_ff_pow(cint x, cint y){
  union {cint i; cfloat f;} r, t;
  r.i = x; t.i = y; r.f = pow(r.f, t.f);
  return r.i;
}

cint cfloat_fi_pow(cint x, cint y){
  union {cint i; cfloat f;} r;
  r.i = x; r.f = pow(r.f, y);
  return r.i; 
}

cint cfloat_if_pow(cint x, cint y){
  union {cint i; cfloat f;} r;
  r.i = y; r.f = pow(x, r.f);
  return r.i;
}

cint cfloat_ii_pow(cint x, cint y){
  union {cint i; cfloat f;} r;
  r.f = pow((cfloat)x, (cfloat)y);
  return r.i;
}

cint cfloat_ff_rem(cint x, cint y){
  union {cint i; cfloat f;} r, t;
  r.i = x; t.i = y; r.f = fmod(r.f, t.f);
  return r.i;
}

cint cfloat_fi_rem(cint x, cint y){
  union {cint i; cfloat f;} r;
  r.i = x; r.f = fmod(r.f, y);
  return r.i;
}

cint cfloat_if_rem(cint x, cint y){
  union {cint i; cfloat f;} r;
  r.i = y; r.f = fmod(x, r.f);
  return r.i;
}

