#include "libm.h"#if FLT_EVAL_METHOD==0#define EPS FLT_EPSILON#elif FLT_EVAL_METHOD==1#define EPS DBL_EPSILON#elif FLT_EVAL_METHOD==2#define EPS LDBL_EPSILON#endifstatic const float_t toint = 1/EPS;float roundf(float x){union {float f; uint32_t i;} u = {x};int e = u.i >> 23 & 0xff;float_t y;if (e >= 0x7f+23)return x;if (u.i >> 31)x = -x;if (e < 0x7f-1) {FORCE_EVAL(x + toint);return 0*u.f;}y = x + toint - toint - x;if (y > 0.5f)y = y + x - 1;else if (y <= -0.5f)y = y + x + 1;elsey = y + x;if (u.i >> 31)y = -y;return y;}