#include "gen.h"
-#include <stdio.h>
static int mpf1(struct t *s, float (*f)(float))
{
s->dy = 0;
setupfenv(s->r);
s->y = f(s->x);
s->e = getexcept();
-//printf("%La %d\n", s->y, s->e);
return 0;
}
return 0;
}
+static double sinpi(double x) { return sin(3.141592653589793238*x); }
+int mpsinpi(struct t *t) { return mpd1(t, sinpi); }
+
+static double add(double x, double y) { double z = x + y; return z; }
+int mpadd(struct t *t) { return mpd2(t, add); }
+static double mul(double x, double y) { double z = x * y; return z; }
+int mpmul(struct t *t) { return mpd2(t, mul); }
+static double div(double x, double y) { double z = x / y; return z; }
+int mpdiv(struct t *t) { return mpd2(t, div); }
int mpacos(struct t *t) { return mpd1(t, acos); }
int mpacosf(struct t *t) { return mpf1(t, acosf); }
int mppow10f(struct t *t) { return mpf1(t, pow10f); }
int mppow10l(struct t *t) { return mpl1(t, pow10l); }
-int mpfrexp(struct t *t)
-{
- int i;
-
- t->dy = 0;
- setupfenv(t->r);
- t->y = frexp(t->x, &i);
- t->e = getexcept();
- t->i = i;
- return 0;
-}
-
-int mpfrexpf(struct t *t)
-{
- int i;
-
- t->dy = 0;
- setupfenv(t->r);
- t->y = frexpf(t->x, &i);
- t->e = getexcept();
- t->i = i;
- return 0;
+#define mp_fi_f(n) \
+int mp##n(struct t *t) \
+{ \
+ t->dy = 0; \
+ setupfenv(t->r); \
+ t->y = n(t->x, t->i); \
+ t->e = getexcept(); \
+ return 0; \
}
-int mpfrexpl(struct t *t)
-{
- int i;
-
- t->dy = 0;
- setupfenv(t->r);
- t->y = frexpl(t->x, &i);
- t->e = getexcept();
- t->i = i;
- return 0;
+mp_fi_f(ldexp)
+mp_fi_f(ldexpf)
+mp_fi_f(ldexpl)
+mp_fi_f(scalbn)
+mp_fi_f(scalbnf)
+mp_fi_f(scalbnl)
+mp_fi_f(scalbln)
+mp_fi_f(scalblnf)
+mp_fi_f(scalblnl)
+
+#define mp_f_fi(n) \
+int mp##n(struct t *t) \
+{ \
+ int i; \
+ t->dy = 0; \
+ setupfenv(t->r); \
+ t->y = n(t->x, &i); \
+ t->e = getexcept(); \
+ t->i = i; \
+ return 0; \
}
-int mpldexp(struct t *t)
-{
- t->dy = 0;
- setupfenv(t->r);
- t->y = ldexp(t->x, t->i);
- t->e = getexcept();
- return 0;
-}
+mp_f_fi(frexp)
+mp_f_fi(frexpf)
+mp_f_fi(frexpl)
+mp_f_fi(lgamma_r)
+mp_f_fi(lgammaf_r)
+mp_f_fi(lgammal_r)
-int mpldexpf(struct t *t)
+int mplgamma(struct t *t)
{
t->dy = 0;
setupfenv(t->r);
- t->y = ldexpf(t->x, t->i);
+ t->y = lgamma(t->x);
t->e = getexcept();
+ t->i = signgam;
return 0;
}
-int mpldexpl(struct t *t)
+int mplgammaf(struct t *t)
{
t->dy = 0;
setupfenv(t->r);
- t->y = ldexpl(t->x, t->i);
+ t->y = lgammaf(t->x);
t->e = getexcept();
+ t->i = signgam;
return 0;
}
-int mpscalbn(struct t *t)
+int mplgammal(struct t *t)
{
t->dy = 0;
setupfenv(t->r);
- t->y = scalbn(t->x, t->i);
+ t->y = lgammal(t->x);
t->e = getexcept();
+ t->i = signgam;
return 0;
}
-int mpscalbnf(struct t *t)
-{
- t->dy = 0;
- setupfenv(t->r);
- t->y = scalbnf(t->x, t->i);
- t->e = getexcept();
- return 0;
+#define mp_f_i(n) \
+int mp##n(struct t *t) \
+{ \
+ setupfenv(t->r); \
+ t->i = n(t->x); \
+ t->e = getexcept(); \
+ return 0; \
}
-int mpscalbnl(struct t *t)
+mp_f_i(ilogb)
+mp_f_i(ilogbf)
+mp_f_i(ilogbl)
+mp_f_i(llrint)
+mp_f_i(llrintf)
+mp_f_i(llrintl)
+mp_f_i(lrint)
+mp_f_i(lrintf)
+mp_f_i(lrintl)
+mp_f_i(llround)
+mp_f_i(llroundf)
+mp_f_i(llroundl)
+mp_f_i(lround)
+mp_f_i(lroundf)
+mp_f_i(lroundl)
+
+int mpmodf(struct t *t)
{
- t->dy = 0;
- setupfenv(t->r);
- t->y = scalbnl(t->x, t->i);
- t->e = getexcept();
- return 0;
-}
+ double y2;
-int mpscalbln(struct t *t)
-{
- t->dy = 0;
+ t->dy = t->dy2 = 0;
setupfenv(t->r);
- t->y = scalbln(t->x, t->i);
+ t->y = modf(t->x, &y2);
+ t->y2 = y2;
t->e = getexcept();
return 0;
}
-int mpscalblnf(struct t *t)
+int mpmodff(struct t *t)
{
- t->dy = 0;
- setupfenv(t->r);
- t->y = scalblnf(t->x, t->i);
- t->e = getexcept();
- return 0;
-}
+ float y2;
-int mpscalblnl(struct t *t)
-{
- t->dy = 0;
+ t->dy = t->dy2 = 0;
setupfenv(t->r);
- t->y = scalblnl(t->x, t->i);
+ t->y = modff(t->x, &y2);
+ t->y2 = y2;
t->e = getexcept();
return 0;
}
-int mplgamma(struct t *t)
+int mpmodfl(struct t *t)
{
- t->dy = 0;
+ t->dy = t->dy2 = 0;
setupfenv(t->r);
- t->y = lgamma(t->x);
+ t->y = modfl(t->x, &t->y2);
t->e = getexcept();
- t->i = signgam;
return 0;
}
-int mplgammaf(struct t *t)
+int mpsincos(struct t *t)
{
- t->dy = 0;
- setupfenv(t->r);
- t->y = lgammaf(t->x);
- t->e = getexcept();
- t->i = signgam;
- return 0;
-}
+ double y, y2;
-int mplgammal(struct t *t)
-{
- t->dy = 0;
+ t->dy = t->dy2 = 0;
setupfenv(t->r);
- t->y = lgammal(t->x);
+ sincos(t->x, &y, &y2);
+ t->y = y;
+ t->y2 = y2;
t->e = getexcept();
- t->i = signgam;
return 0;
}
-int mplgamma_r(struct t *t)
+int mpsincosf(struct t *t)
{
- int i;
+ float y, y2;
- t->dy = 0;
+ t->dy = t->dy2 = 0;
setupfenv(t->r);
- t->y = lgamma_r(t->x, &i);
+ sincosf(t->x, &y, &y2);
+ t->y = y;
+ t->y2 = y2;
t->e = getexcept();
- t->i = i;
return 0;
}
-int mplgammaf_r(struct t *t)
+int mpsincosl(struct t *t)
{
- int i;
-
- t->dy = 0;
+ t->dy = t->dy2 = 0;
setupfenv(t->r);
- t->y = lgammaf_r(t->x, &i);
+ sincosl(t->x, &t->y, &t->y2);
t->e = getexcept();
- t->i = i;
return 0;
}
-int mplgammal_r(struct t *t)
-{
- int i;
-
- t->dy = 0;
- setupfenv(t->r);
- t->y = lgammal_r(t->x, &i);
- t->e = getexcept();
- t->i = i;
- return 0;
+#define mp_ff_fi(n) \
+int mp##n(struct t *t) \
+{ \
+ int i; \
+ t->dy = 0; \
+ setupfenv(t->r); \
+ t->y = n(t->x, t->x2, &i); \
+ t->e = getexcept(); \
+ t->i = i; \
+ return 0; \
}
-int mpilogb(struct t *t)
-{
- setupfenv(t->r);
- t->i = ilogb(t->x);
- t->e = getexcept();
- return 0;
-}
-int mpilogbf(struct t *t)
-{
- setupfenv(t->r);
- t->i = ilogbf(t->x);
- t->e = getexcept();
- return 0;
+mp_ff_fi(remquo)
+mp_ff_fi(remquof)
+mp_ff_fi(remquol)
+
+#define mp_fff_f(n) \
+int mp##n(struct t *t) \
+{ \
+ t->dy = 0; \
+ setupfenv(t->r); \
+ t->y = n(t->x, t->x2, t->x3); \
+ t->e = getexcept(); \
+ return 0; \
}
-int mpilogbl(struct t *t)
-{
- setupfenv(t->r);
- t->i = ilogbl(t->x);
- t->e = getexcept();
- return 0;
+
+mp_fff_f(fma)
+mp_fff_f(fmaf)
+mp_fff_f(fmal)
+
+#define mp_if_f(n) \
+int mp##n(struct t *t) \
+{ \
+ t->dy = 0; \
+ setupfenv(t->r); \
+ t->y = n(t->i, t->x); \
+ t->e = getexcept(); \
+ return 0; \
}
+mp_if_f(jn)
+mp_if_f(jnf)
+//mp_if_f(jnl)
+mp_if_f(yn)
+mp_if_f(ynf)
+//mp_if_f(ynl)
+