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

char *name = "exp neg sub";

double f_if(float x) {
        float r8871 = 1;
        float r8872 = x;
        float r8873 = r8872 * r8872;
        float r8874 = r8871 - r8873;
        float r8875 = -r8874;
        float r8876 = exp(r8875);
        return r8876;
}

double f_id(double x) {
        double r8877 = 1;
        double r8878 = x;
        double r8879 = r8878 * r8878;
        double r8880 = r8877 - r8879;
        double r8881 = -r8880;
        double r8882 = exp(r8881);
        return r8882;
}


double f_of(float x) {
        float r8883 = 1;
        float r8884 = x;
        float r8885 = r8884 * r8884;
        float r8886 = r8885 * r8885;
        float r8887 = r8883 - r8886;
        float r8888 = r8883 + r8885;
        float r8889 = r8887 / r8888;
        float r8890 = -r8889;
        float r8891 = exp(r8890);
        return r8891;
}

double f_od(double x) {
        double r8892 = 1;
        double r8893 = x;
        double r8894 = r8893 * r8893;
        double r8895 = r8894 * r8894;
        double r8896 = r8892 - r8895;
        double r8897 = r8892 + r8894;
        double r8898 = r8896 / r8897;
        double r8899 = -r8898;
        double r8900 = exp(r8899);
        return r8900;
}

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 r8901, r8902, r8903, r8904, r8905, r8906;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init_set_str(r8901, "1", 10, MPFR_RNDN);
        mpfr_init(r8902);
        mpfr_init(r8903);
        mpfr_init(r8904);
        mpfr_init(r8905);
        mpfr_init(r8906);
}

double f_im(double x) {
        ;
        mpfr_set_d(r8902, x, MPFR_RNDN);
        mpfr_mul(r8903, r8902, r8902, MPFR_RNDN);
        mpfr_sub(r8904, r8901, r8903, MPFR_RNDN);
        mpfr_neg(r8905, r8904, MPFR_RNDN);
        mpfr_exp(r8906, r8905, MPFR_RNDN);
        return mpfr_get_d(r8906, MPFR_RNDN);
}

static mpfr_t r8907, r8908, r8909, r8910, r8911, r8912, r8913, r8914, r8915;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init_set_str(r8907, "1", 10, MPFR_RNDN);
        mpfr_init(r8908);
        mpfr_init(r8909);
        mpfr_init(r8910);
        mpfr_init(r8911);
        mpfr_init(r8912);
        mpfr_init(r8913);
        mpfr_init(r8914);
        mpfr_init(r8915);
}

double f_fm(double x) {
        ;
        mpfr_set_d(r8908, x, MPFR_RNDN);
        mpfr_mul(r8909, r8908, r8908, MPFR_RNDN);
        mpfr_mul(r8910, r8909, r8909, MPFR_RNDN);
        mpfr_sub(r8911, r8907, r8910, MPFR_RNDN);
        mpfr_add(r8912, r8907, r8909, MPFR_RNDN);
        mpfr_div(r8913, r8911, r8912, MPFR_RNDN);
        mpfr_neg(r8914, r8913, MPFR_RNDN);
        mpfr_exp(r8915, r8914, MPFR_RNDN);
        return mpfr_get_d(r8915, MPFR_RNDN);
}

static mpfr_t r8916, r8917, r8918, r8919, r8920, r8921, r8922, r8923, r8924;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init_set_str(r8916, "1", 10, MPFR_RNDN);
        mpfr_init(r8917);
        mpfr_init(r8918);
        mpfr_init(r8919);
        mpfr_init(r8920);
        mpfr_init(r8921);
        mpfr_init(r8922);
        mpfr_init(r8923);
        mpfr_init(r8924);
}

double f_dm(double x) {
        ;
        mpfr_set_d(r8917, x, MPFR_RNDN);
        mpfr_mul(r8918, r8917, r8917, MPFR_RNDN);
        mpfr_mul(r8919, r8918, r8918, MPFR_RNDN);
        mpfr_sub(r8920, r8916, r8919, MPFR_RNDN);
        mpfr_add(r8921, r8916, r8918, MPFR_RNDN);
        mpfr_div(r8922, r8920, r8921, MPFR_RNDN);
        mpfr_neg(r8923, r8922, MPFR_RNDN);
        mpfr_exp(r8924, r8923, MPFR_RNDN);
        return mpfr_get_d(r8924, MPFR_RNDN);
}

