#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 r10429 = a;
        float r10430 = x;
        float r10431 = r10429 * r10430;
        float r10432 = exp(r10431);
        float r10433 = 1.0f;
        float r10434 = r10432 - r10433;
        return r10434;
}

double f_id(double a, double x) {
        double r10435 = a;
        double r10436 = x;
        double r10437 = r10435 * r10436;
        double r10438 = exp(r10437);
        double r10439 = 1.0;
        double r10440 = r10438 - r10439;
        return r10440;
}


double f_of(float a, float x) {
        float r10441 = a;
        float r10442 = x;
        float r10443 = r10441 * r10442;
        float r10444 = exp(r10443);
        float r10445 = 1.0f;
        float r10446 = r10444 - r10445;
        float r10447 = cbrt(r10446);
        float r10448 = r10447 * r10447;
        float r10449 = sqrt(r10446);
        float r10450 = cbrt(r10449);
        float r10451 = r10450 * r10450;
        float r10452 = r10448 * r10451;
        float r10453 = 0.12008455983736821f;
        bool r10454 = r10452 <= r10453;
        float r10455 = r10443 * r10443;
        float r10456 = 0.16666666666666666f;
        float r10457 = r10456 * r10442;
        float r10458 = r10441 * r10457;
        float r10459 = 0.5f;
        float r10460 = r10458 + r10459;
        float r10461 = r10455 * r10460;
        float r10462 = r10461 + r10443;
        float r10463 = cbrt(r10447);
        float r10464 = r10463 * r10463;
        float r10465 = 3.0f;
        float r10466 = pow(r10444, r10465);
        float r10467 = pow(r10445, r10465);
        float r10468 = r10466 - r10467;
        float r10469 = r10444 * r10444;
        float r10470 = r10445 + r10444;
        float r10471 = r10469 + r10470;
        float r10472 = r10468 / r10471;
        float r10473 = cbrt(r10472);
        float r10474 = cbrt(r10473);
        float r10475 = r10464 * r10474;
        float r10476 = r10475 * r10448;
        float r10477 = r10454 ? r10462 : r10476;
        return r10477;
}

double f_od(double a, double x) {
        double r10478 = a;
        double r10479 = x;
        double r10480 = r10478 * r10479;
        double r10481 = exp(r10480);
        double r10482 = 1.0;
        double r10483 = r10481 - r10482;
        double r10484 = cbrt(r10483);
        double r10485 = r10484 * r10484;
        double r10486 = sqrt(r10483);
        double r10487 = cbrt(r10486);
        double r10488 = r10487 * r10487;
        double r10489 = r10485 * r10488;
        double r10490 = 0.12008455983736821;
        bool r10491 = r10489 <= r10490;
        double r10492 = r10480 * r10480;
        double r10493 = 0.16666666666666666;
        double r10494 = r10493 * r10479;
        double r10495 = r10478 * r10494;
        double r10496 = 0.5;
        double r10497 = r10495 + r10496;
        double r10498 = r10492 * r10497;
        double r10499 = r10498 + r10480;
        double r10500 = cbrt(r10484);
        double r10501 = r10500 * r10500;
        double r10502 = 3.0;
        double r10503 = pow(r10481, r10502);
        double r10504 = pow(r10482, r10502);
        double r10505 = r10503 - r10504;
        double r10506 = r10481 * r10481;
        double r10507 = r10482 + r10481;
        double r10508 = r10506 + r10507;
        double r10509 = r10505 / r10508;
        double r10510 = cbrt(r10509);
        double r10511 = cbrt(r10510);
        double r10512 = r10501 * r10511;
        double r10513 = r10512 * r10485;
        double r10514 = r10491 ? r10499 : r10513;
        return r10514;
}

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 r10515, r10516, r10517, r10518, r10519, r10520;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init(r10515);
        mpfr_init(r10516);
        mpfr_init(r10517);
        mpfr_init(r10518);
        mpfr_init_set_str(r10519, "1", 10, MPFR_RNDN);
        mpfr_init(r10520);
}

double f_im(double a, double x) {
        mpfr_set_d(r10515, a, MPFR_RNDN);
        mpfr_set_d(r10516, x, MPFR_RNDN);
        mpfr_mul(r10517, r10515, r10516, MPFR_RNDN);
        mpfr_exp(r10518, r10517, MPFR_RNDN);
        ;
        mpfr_sub(r10520, r10518, r10519, MPFR_RNDN);
        return mpfr_get_d(r10520, MPFR_RNDN);
}

static mpfr_t r10521, r10522, r10523, r10524, r10525, r10526, r10527, r10528, r10529, r10530, r10531, r10532, r10533, r10534, r10535, r10536, r10537, r10538, r10539, r10540, r10541, r10542, r10543, r10544, r10545, r10546, r10547, r10548, r10549, r10550, r10551, r10552, r10553, r10554, r10555, r10556, r10557;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r10521);
        mpfr_init(r10522);
        mpfr_init(r10523);
        mpfr_init(r10524);
        mpfr_init_set_str(r10525, "1", 10, MPFR_RNDN);
        mpfr_init(r10526);
        mpfr_init(r10527);
        mpfr_init(r10528);
        mpfr_init(r10529);
        mpfr_init(r10530);
        mpfr_init(r10531);
        mpfr_init(r10532);
        mpfr_init_set_str(r10533, "0.12008455983736821", 10, MPFR_RNDN);
        mpfr_init(r10534);
        mpfr_init(r10535);
        mpfr_init_set_str(r10536, "1/6", 10, MPFR_RNDN);
        mpfr_init(r10537);
        mpfr_init(r10538);
        mpfr_init_set_str(r10539, "1/2", 10, MPFR_RNDN);
        mpfr_init(r10540);
        mpfr_init(r10541);
        mpfr_init(r10542);
        mpfr_init(r10543);
        mpfr_init(r10544);
        mpfr_init_set_str(r10545, "3", 10, MPFR_RNDN);
        mpfr_init(r10546);
        mpfr_init(r10547);
        mpfr_init(r10548);
        mpfr_init(r10549);
        mpfr_init(r10550);
        mpfr_init(r10551);
        mpfr_init(r10552);
        mpfr_init(r10553);
        mpfr_init(r10554);
        mpfr_init(r10555);
        mpfr_init(r10556);
        mpfr_init(r10557);
}

double f_fm(double a, double x) {
        mpfr_set_d(r10521, a, MPFR_RNDN);
        mpfr_set_d(r10522, x, MPFR_RNDN);
        mpfr_mul(r10523, r10521, r10522, MPFR_RNDN);
        mpfr_exp(r10524, r10523, MPFR_RNDN);
        ;
        mpfr_sub(r10526, r10524, r10525, MPFR_RNDN);
        mpfr_cbrt(r10527, r10526, MPFR_RNDN);
        mpfr_mul(r10528, r10527, r10527, MPFR_RNDN);
        mpfr_sqrt(r10529, r10526, MPFR_RNDN);
        mpfr_cbrt(r10530, r10529, MPFR_RNDN);
        mpfr_mul(r10531, r10530, r10530, MPFR_RNDN);
        mpfr_mul(r10532, r10528, r10531, MPFR_RNDN);
        ;
        mpfr_set_si(r10534, mpfr_cmp(r10532, r10533) <= 0, MPFR_RNDN);
        mpfr_mul(r10535, r10523, r10523, MPFR_RNDN);
        ;
        mpfr_mul(r10537, r10536, r10522, MPFR_RNDN);
        mpfr_mul(r10538, r10521, r10537, MPFR_RNDN);
        ;
        mpfr_add(r10540, r10538, r10539, MPFR_RNDN);
        mpfr_mul(r10541, r10535, r10540, MPFR_RNDN);
        mpfr_add(r10542, r10541, r10523, MPFR_RNDN);
        mpfr_cbrt(r10543, r10527, MPFR_RNDN);
        mpfr_mul(r10544, r10543, r10543, MPFR_RNDN);
        ;
        mpfr_pow(r10546, r10524, r10545, MPFR_RNDN);
        mpfr_pow(r10547, r10525, r10545, MPFR_RNDN);
        mpfr_sub(r10548, r10546, r10547, MPFR_RNDN);
        mpfr_mul(r10549, r10524, r10524, MPFR_RNDN);
        mpfr_add(r10550, r10525, r10524, MPFR_RNDN);
        mpfr_add(r10551, r10549, r10550, MPFR_RNDN);
        mpfr_div(r10552, r10548, r10551, MPFR_RNDN);
        mpfr_cbrt(r10553, r10552, MPFR_RNDN);
        mpfr_cbrt(r10554, r10553, MPFR_RNDN);
        mpfr_mul(r10555, r10544, r10554, MPFR_RNDN);
        mpfr_mul(r10556, r10555, r10528, MPFR_RNDN);
        if (mpfr_get_si(r10534, MPFR_RNDN)) { mpfr_set(r10557, r10542, MPFR_RNDN); } else { mpfr_set(r10557, r10556, MPFR_RNDN); };
        return mpfr_get_d(r10557, MPFR_RNDN);
}

static mpfr_t r10558, r10559, r10560, r10561, r10562, r10563, r10564, r10565, r10566, r10567, r10568, r10569, r10570, r10571, r10572, r10573, r10574, r10575, r10576, r10577, r10578, r10579, r10580, r10581, r10582, r10583, r10584, r10585, r10586, r10587, r10588, r10589, r10590, r10591, r10592, r10593, r10594;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r10558);
        mpfr_init(r10559);
        mpfr_init(r10560);
        mpfr_init(r10561);
        mpfr_init_set_str(r10562, "1", 10, MPFR_RNDN);
        mpfr_init(r10563);
        mpfr_init(r10564);
        mpfr_init(r10565);
        mpfr_init(r10566);
        mpfr_init(r10567);
        mpfr_init(r10568);
        mpfr_init(r10569);
        mpfr_init_set_str(r10570, "0.12008455983736821", 10, MPFR_RNDN);
        mpfr_init(r10571);
        mpfr_init(r10572);
        mpfr_init_set_str(r10573, "1/6", 10, MPFR_RNDN);
        mpfr_init(r10574);
        mpfr_init(r10575);
        mpfr_init_set_str(r10576, "1/2", 10, MPFR_RNDN);
        mpfr_init(r10577);
        mpfr_init(r10578);
        mpfr_init(r10579);
        mpfr_init(r10580);
        mpfr_init(r10581);
        mpfr_init_set_str(r10582, "3", 10, MPFR_RNDN);
        mpfr_init(r10583);
        mpfr_init(r10584);
        mpfr_init(r10585);
        mpfr_init(r10586);
        mpfr_init(r10587);
        mpfr_init(r10588);
        mpfr_init(r10589);
        mpfr_init(r10590);
        mpfr_init(r10591);
        mpfr_init(r10592);
        mpfr_init(r10593);
        mpfr_init(r10594);
}

double f_dm(double a, double x) {
        mpfr_set_d(r10558, a, MPFR_RNDN);
        mpfr_set_d(r10559, x, MPFR_RNDN);
        mpfr_mul(r10560, r10558, r10559, MPFR_RNDN);
        mpfr_exp(r10561, r10560, MPFR_RNDN);
        ;
        mpfr_sub(r10563, r10561, r10562, MPFR_RNDN);
        mpfr_cbrt(r10564, r10563, MPFR_RNDN);
        mpfr_mul(r10565, r10564, r10564, MPFR_RNDN);
        mpfr_sqrt(r10566, r10563, MPFR_RNDN);
        mpfr_cbrt(r10567, r10566, MPFR_RNDN);
        mpfr_mul(r10568, r10567, r10567, MPFR_RNDN);
        mpfr_mul(r10569, r10565, r10568, MPFR_RNDN);
        ;
        mpfr_set_si(r10571, mpfr_cmp(r10569, r10570) <= 0, MPFR_RNDN);
        mpfr_mul(r10572, r10560, r10560, MPFR_RNDN);
        ;
        mpfr_mul(r10574, r10573, r10559, MPFR_RNDN);
        mpfr_mul(r10575, r10558, r10574, MPFR_RNDN);
        ;
        mpfr_add(r10577, r10575, r10576, MPFR_RNDN);
        mpfr_mul(r10578, r10572, r10577, MPFR_RNDN);
        mpfr_add(r10579, r10578, r10560, MPFR_RNDN);
        mpfr_cbrt(r10580, r10564, MPFR_RNDN);
        mpfr_mul(r10581, r10580, r10580, MPFR_RNDN);
        ;
        mpfr_pow(r10583, r10561, r10582, MPFR_RNDN);
        mpfr_pow(r10584, r10562, r10582, MPFR_RNDN);
        mpfr_sub(r10585, r10583, r10584, MPFR_RNDN);
        mpfr_mul(r10586, r10561, r10561, MPFR_RNDN);
        mpfr_add(r10587, r10562, r10561, MPFR_RNDN);
        mpfr_add(r10588, r10586, r10587, MPFR_RNDN);
        mpfr_div(r10589, r10585, r10588, MPFR_RNDN);
        mpfr_cbrt(r10590, r10589, MPFR_RNDN);
        mpfr_cbrt(r10591, r10590, MPFR_RNDN);
        mpfr_mul(r10592, r10581, r10591, MPFR_RNDN);
        mpfr_mul(r10593, r10592, r10565, MPFR_RNDN);
        if (mpfr_get_si(r10571, MPFR_RNDN)) { mpfr_set(r10594, r10579, MPFR_RNDN); } else { mpfr_set(r10594, r10593, MPFR_RNDN); };
        return mpfr_get_d(r10594, MPFR_RNDN);
}

