#include <tgmath.h>
#include <gmp.h>
#include <mpfr.h>
#include <stdio.h>
#include <stdbool.h>

char *name = "expax (section 3.5)";

double f_if(float a, float x) {
        float r6215846 = a;
        float r6215847 = x;
        float r6215848 = r6215846 * r6215847;
        float r6215849 = exp(r6215848);
        float r6215850 = 1;
        float r6215851 = r6215849 - r6215850;
        return r6215851;
}

double f_id(double a, double x) {
        double r6215852 = a;
        double r6215853 = x;
        double r6215854 = r6215852 * r6215853;
        double r6215855 = exp(r6215854);
        double r6215856 = 1;
        double r6215857 = r6215855 - r6215856;
        return r6215857;
}


double f_of(float a, float x) {
        float r6215858 = a;
        float r6215859 = x;
        float r6215860 = r6215858 * r6215859;
        float r6215861 = -7.255767592865645e-07;
        bool r6215862 = r6215860 <= r6215861;
        float r6215863 = exp(r6215860);
        float r6215864 = 1;
        float r6215865 = r6215863 - r6215864;
        float r6215866 = 1/2;
        float r6215867 = r6215866 * r6215859;
        float r6215868 = r6215858 * r6215858;
        float r6215869 = r6215867 * r6215868;
        float r6215870 = r6215858 + r6215869;
        float r6215871 = r6215859 * r6215870;
        float r6215872 = r6215862 ? r6215865 : r6215871;
        return r6215872;
}

double f_od(double a, double x) {
        double r6215873 = a;
        double r6215874 = x;
        double r6215875 = r6215873 * r6215874;
        double r6215876 = -7.255767592865645e-07;
        bool r6215877 = r6215875 <= r6215876;
        double r6215878 = exp(r6215875);
        double r6215879 = 1;
        double r6215880 = r6215878 - r6215879;
        double r6215881 = 1/2;
        double r6215882 = r6215881 * r6215874;
        double r6215883 = r6215873 * r6215873;
        double r6215884 = r6215882 * r6215883;
        double r6215885 = r6215873 + r6215884;
        double r6215886 = r6215874 * r6215885;
        double r6215887 = r6215877 ? r6215880 : r6215886;
        return r6215887;
}

void mpfr_fmod2(mpfr_t r, mpfr_t n, mpfr_t d, mpfr_rnd_t rmd) {
        mpfr_fmod(r, n, d, rmd);
        if (mpfr_cmp_ui(r, 0) < 0) mpfr_add(r, r, d, rmd);
}


static mpfr_t r6215888, r6215889, r6215890, r6215891, r6215892, r6215893;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init(r6215888);
        mpfr_init(r6215889);
        mpfr_init(r6215890);
        mpfr_init(r6215891);
        mpfr_init_set_str(r6215892, "1", 10, MPFR_RNDN);
        mpfr_init(r6215893);
}

double f_im(double a, double x) {
        mpfr_set_d(r6215888, a, MPFR_RNDN);
        mpfr_set_d(r6215889, x, MPFR_RNDN);
        mpfr_mul(r6215890, r6215888, r6215889, MPFR_RNDN);
        mpfr_exp(r6215891, r6215890, MPFR_RNDN);
        ;
        mpfr_sub(r6215893, r6215891, r6215892, MPFR_RNDN);
        return mpfr_get_d(r6215893, MPFR_RNDN);
}

static mpfr_t r6215894, r6215895, r6215896, r6215897, r6215898, r6215899, r6215900, r6215901, r6215902, r6215903, r6215904, r6215905, r6215906, r6215907, r6215908;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r6215894);
        mpfr_init(r6215895);
        mpfr_init(r6215896);
        mpfr_init_set_str(r6215897, "-7.255767592865645e-07", 10, MPFR_RNDN);
        mpfr_init(r6215898);
        mpfr_init(r6215899);
        mpfr_init_set_str(r6215900, "1", 10, MPFR_RNDN);
        mpfr_init(r6215901);
        mpfr_init_set_str(r6215902, "1/2", 10, MPFR_RNDN);
        mpfr_init(r6215903);
        mpfr_init(r6215904);
        mpfr_init(r6215905);
        mpfr_init(r6215906);
        mpfr_init(r6215907);
        mpfr_init(r6215908);
}

double f_fm(double a, double x) {
        mpfr_set_d(r6215894, a, MPFR_RNDN);
        mpfr_set_d(r6215895, x, MPFR_RNDN);
        mpfr_mul(r6215896, r6215894, r6215895, MPFR_RNDN);
        ;
        mpfr_set_si(r6215898, mpfr_cmp(r6215896, r6215897) <= 0, MPFR_RNDN);
        mpfr_exp(r6215899, r6215896, MPFR_RNDN);
        ;
        mpfr_sub(r6215901, r6215899, r6215900, MPFR_RNDN);
        ;
        mpfr_mul(r6215903, r6215902, r6215895, MPFR_RNDN);
        mpfr_mul(r6215904, r6215894, r6215894, MPFR_RNDN);
        mpfr_mul(r6215905, r6215903, r6215904, MPFR_RNDN);
        mpfr_add(r6215906, r6215894, r6215905, MPFR_RNDN);
        mpfr_mul(r6215907, r6215895, r6215906, MPFR_RNDN);
        if (mpfr_get_si(r6215898, MPFR_RNDN)) { mpfr_set(r6215908, r6215901, MPFR_RNDN); } else { mpfr_set(r6215908, r6215907, MPFR_RNDN); };
        return mpfr_get_d(r6215908, MPFR_RNDN);
}

static mpfr_t r6215909, r6215910, r6215911, r6215912, r6215913, r6215914, r6215915, r6215916, r6215917, r6215918, r6215919, r6215920, r6215921, r6215922, r6215923;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r6215909);
        mpfr_init(r6215910);
        mpfr_init(r6215911);
        mpfr_init_set_str(r6215912, "-7.255767592865645e-07", 10, MPFR_RNDN);
        mpfr_init(r6215913);
        mpfr_init(r6215914);
        mpfr_init_set_str(r6215915, "1", 10, MPFR_RNDN);
        mpfr_init(r6215916);
        mpfr_init_set_str(r6215917, "1/2", 10, MPFR_RNDN);
        mpfr_init(r6215918);
        mpfr_init(r6215919);
        mpfr_init(r6215920);
        mpfr_init(r6215921);
        mpfr_init(r6215922);
        mpfr_init(r6215923);
}

double f_dm(double a, double x) {
        mpfr_set_d(r6215909, a, MPFR_RNDN);
        mpfr_set_d(r6215910, x, MPFR_RNDN);
        mpfr_mul(r6215911, r6215909, r6215910, MPFR_RNDN);
        ;
        mpfr_set_si(r6215913, mpfr_cmp(r6215911, r6215912) <= 0, MPFR_RNDN);
        mpfr_exp(r6215914, r6215911, MPFR_RNDN);
        ;
        mpfr_sub(r6215916, r6215914, r6215915, MPFR_RNDN);
        ;
        mpfr_mul(r6215918, r6215917, r6215910, MPFR_RNDN);
        mpfr_mul(r6215919, r6215909, r6215909, MPFR_RNDN);
        mpfr_mul(r6215920, r6215918, r6215919, MPFR_RNDN);
        mpfr_add(r6215921, r6215909, r6215920, MPFR_RNDN);
        mpfr_mul(r6215922, r6215910, r6215921, MPFR_RNDN);
        if (mpfr_get_si(r6215913, MPFR_RNDN)) { mpfr_set(r6215923, r6215916, MPFR_RNDN); } else { mpfr_set(r6215923, r6215922, MPFR_RNDN); };
        return mpfr_get_d(r6215923, MPFR_RNDN);
}

