if (f.value > 0) return fixed<T,p>::trunc(f); else return fixed<T,p>::round(f - fixed<T,p>::half());
if (f.value > 0) return trunc(f); else return round(f - fixed<T,p>::half());
floor(const fixed<T,p>& f){  if (f.value > 0) return fixed<T,p>::trunc(f);  else return fixed<T,p>::round(f - fixed<T,p>::half());}