X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=src%2Fmath%2Futil.h;h=d84b0e345fe05598f34187026def2f1c96080f52;hb=d2ba8e6653b825dff20e989f4cf8fdcc33f3f6be;hp=10d9279d4ef5a34555d728b1ea7c39eb98e81107;hpb=75aab93ef75299e347be24f57223dc93f2af80a4;p=libc-test diff --git a/src/math/util.h b/src/math/util.h index 10d9279..d84b0e3 100644 --- a/src/math/util.h +++ b/src/math/util.h @@ -78,35 +78,48 @@ struct l_li {POS int r; long double x; long double y; float dy; long long i; int struct di_d {POS int r; double x; long long i; double y; float dy; int e; }; struct fi_f {POS int r; float x; long long i; float y; float dy; int e; }; struct li_l {POS int r; long double x; long long i; long double y; float dy; int e; }; +struct d_i {POS int r; double x; long long i; int e; }; +struct f_i {POS int r; float x; long long i; int e; }; +struct l_i {POS int r; long double x; long long i; int e; }; +struct d_dd {POS int r; double x; double y; float dy; double y2; float dy2; int e; }; +struct f_ff {POS int r; float x; float y; float dy; float y2; float dy2; int e; }; +struct l_ll {POS int r; long double x; long double y; float dy; long double y2; float dy2; int e; }; +struct ff_fi {POS int r; float x; float x2; float y; float dy; long long i; int e; }; +struct dd_di {POS int r; double x; double x2; double y; float dy; long long i; int e; }; +struct ll_li {POS int r; long double x; long double x2; long double y; float dy; long long i; int e; }; +struct fff_f {POS int r; float x; float x2; float x3; float y; float dy; int e; }; +struct ddd_d {POS int r; double x; double x2; double x3; double y; float dy; int e; }; +struct lll_l {POS int r; long double x; long double x2; long double x3; long double y; float dy; int e; }; #undef POS char *estr(int); char *rstr(int); -int rconv(int *, char *); -int econv(int *, char *); - -int eulp(double); -int eulpf(float); -int eulpl(long double); float ulperr(double got, double want, float dwant); float ulperrf(float got, float want, float dwant); float ulperrl(long double got, long double want, float dwant); -void setupfenv(int); -int getexcept(void); - static int checkexcept(int got, int want, int r) { + // TODO: we dont checkunderflow and inexact for now if (r == RN) - return got == want || got == (want|INEXACT); - return 1; //(got|INEXACT|UNDERFLOW) == (want|INEXACT|UNDERFLOW); + return (got|INEXACT|UNDERFLOW) == (want|INEXACT|UNDERFLOW); +// return got == want || got == (want|INEXACT); + return 1; } static int checkulp(float d, int r) { + // TODO: we only care about >=1.5 ulp errors for now, should be 1.0 if (r == RN) - return fabsf(d) <= 1.0; - return 1; //fabsf(d) <= 2.0; + return fabsf(d) < 1.5; + return 1; +} + +static int checkcr(long double y, long double ywant, int r) +{ + if (isnan(ywant)) + return isnan(y); + return y == ywant; }