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

char *name = "expq3 (problem 3.4.2)";

double f_if(float a, float b, float eps) {
        float r10354 = eps;
        float r10355 = a;
        float r10356 = b;
        float r10357 = r10355 + r10356;
        float r10358 = r10357 * r10354;
        float r10359 = exp(r10358);
        float r10360 = 1;
        float r10361 = r10359 - r10360;
        float r10362 = r10354 * r10361;
        float r10363 = r10355 * r10354;
        float r10364 = exp(r10363);
        float r10365 = r10364 - r10360;
        float r10366 = r10356 * r10354;
        float r10367 = exp(r10366);
        float r10368 = r10367 - r10360;
        float r10369 = r10365 * r10368;
        float r10370 = r10362 / r10369;
        return r10370;
}

double f_id(double a, double b, double eps) {
        double r10371 = eps;
        double r10372 = a;
        double r10373 = b;
        double r10374 = r10372 + r10373;
        double r10375 = r10374 * r10371;
        double r10376 = exp(r10375);
        double r10377 = 1;
        double r10378 = r10376 - r10377;
        double r10379 = r10371 * r10378;
        double r10380 = r10372 * r10371;
        double r10381 = exp(r10380);
        double r10382 = r10381 - r10377;
        double r10383 = r10373 * r10371;
        double r10384 = exp(r10383);
        double r10385 = r10384 - r10377;
        double r10386 = r10382 * r10385;
        double r10387 = r10379 / r10386;
        return r10387;
}


double f_of(float a, float b, float eps) {
        float r10388 = eps;
        float r10389 = a;
        float r10390 = b;
        float r10391 = r10389 + r10390;
        float r10392 = r10391 * r10388;
        float r10393 = exp(r10392);
        float r10394 = 1;
        float r10395 = r10393 - r10394;
        float r10396 = r10388 * r10395;
        float r10397 = r10389 * r10388;
        float r10398 = exp(r10397);
        float r10399 = r10398 - r10394;
        float r10400 = r10390 * r10388;
        float r10401 = exp(r10400);
        float r10402 = r10401 - r10394;
        float r10403 = r10399 * r10402;
        float r10404 = r10396 / r10403;
        float r10405 = -1.5418342753582873e-10;
        bool r10406 = r10404 <= r10405;
        float r10407 = r10394 / r10389;
        float r10408 = r10394 / r10390;
        float r10409 = r10407 + r10408;
        float r10410 = 1.5079174377527131e+155;
        bool r10411 = r10404 <= r10410;
        float r10412 = r10388 * r10389;
        float r10413 = expm1(r10412);
        float r10414 = r10388 / r10413;
        float r10415 = r10390 + r10389;
        float r10416 = r10415 * r10388;
        float r10417 = expm1(r10416);
        float r10418 = r10388 * r10390;
        float r10419 = expm1(r10418);
        float r10420 = r10417 / r10419;
        float r10421 = r10414 * r10420;
        float r10422 = r10411 ? r10421 : r10409;
        float r10423 = r10406 ? r10409 : r10422;
        return r10423;
}

double f_od(double a, double b, double eps) {
        double r10424 = eps;
        double r10425 = a;
        double r10426 = b;
        double r10427 = r10425 + r10426;
        double r10428 = r10427 * r10424;
        double r10429 = exp(r10428);
        double r10430 = 1;
        double r10431 = r10429 - r10430;
        double r10432 = r10424 * r10431;
        double r10433 = r10425 * r10424;
        double r10434 = exp(r10433);
        double r10435 = r10434 - r10430;
        double r10436 = r10426 * r10424;
        double r10437 = exp(r10436);
        double r10438 = r10437 - r10430;
        double r10439 = r10435 * r10438;
        double r10440 = r10432 / r10439;
        double r10441 = -1.5418342753582873e-10;
        bool r10442 = r10440 <= r10441;
        double r10443 = r10430 / r10425;
        double r10444 = r10430 / r10426;
        double r10445 = r10443 + r10444;
        double r10446 = 1.5079174377527131e+155;
        bool r10447 = r10440 <= r10446;
        double r10448 = r10424 * r10425;
        double r10449 = expm1(r10448);
        double r10450 = r10424 / r10449;
        double r10451 = r10426 + r10425;
        double r10452 = r10451 * r10424;
        double r10453 = expm1(r10452);
        double r10454 = r10424 * r10426;
        double r10455 = expm1(r10454);
        double r10456 = r10453 / r10455;
        double r10457 = r10450 * r10456;
        double r10458 = r10447 ? r10457 : r10445;
        double r10459 = r10442 ? r10445 : r10458;
        return r10459;
}

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 r10460, r10461, r10462, r10463, r10464, r10465, r10466, r10467, r10468, r10469, r10470, r10471, r10472, r10473, r10474, r10475, r10476;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2384);
        mpfr_init(r10460);
        mpfr_init(r10461);
        mpfr_init(r10462);
        mpfr_init(r10463);
        mpfr_init(r10464);
        mpfr_init(r10465);
        mpfr_init_set_str(r10466, "1", 10, MPFR_RNDN);
        mpfr_init(r10467);
        mpfr_init(r10468);
        mpfr_init(r10469);
        mpfr_init(r10470);
        mpfr_init(r10471);
        mpfr_init(r10472);
        mpfr_init(r10473);
        mpfr_init(r10474);
        mpfr_init(r10475);
        mpfr_init(r10476);
}

double f_im(double a, double b, double eps) {
        mpfr_set_d(r10460, eps, MPFR_RNDN);
        mpfr_set_d(r10461, a, MPFR_RNDN);
        mpfr_set_d(r10462, b, MPFR_RNDN);
        mpfr_add(r10463, r10461, r10462, MPFR_RNDN);
        mpfr_mul(r10464, r10463, r10460, MPFR_RNDN);
        mpfr_exp(r10465, r10464, MPFR_RNDN);
        ;
        mpfr_sub(r10467, r10465, r10466, MPFR_RNDN);
        mpfr_mul(r10468, r10460, r10467, MPFR_RNDN);
        mpfr_mul(r10469, r10461, r10460, MPFR_RNDN);
        mpfr_exp(r10470, r10469, MPFR_RNDN);
        mpfr_sub(r10471, r10470, r10466, MPFR_RNDN);
        mpfr_mul(r10472, r10462, r10460, MPFR_RNDN);
        mpfr_exp(r10473, r10472, MPFR_RNDN);
        mpfr_sub(r10474, r10473, r10466, MPFR_RNDN);
        mpfr_mul(r10475, r10471, r10474, MPFR_RNDN);
        mpfr_div(r10476, r10468, r10475, MPFR_RNDN);
        return mpfr_get_d(r10476, MPFR_RNDN);
}

static mpfr_t r10477, r10478, r10479, r10480, r10481, r10482, r10483, r10484, r10485, r10486, r10487, r10488, r10489, r10490, r10491, r10492, r10493, r10494, r10495, r10496, r10497, r10498, r10499, r10500, r10501, r10502, r10503, r10504, r10505, r10506, r10507, r10508, r10509, r10510, r10511, r10512;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r10477);
        mpfr_init(r10478);
        mpfr_init(r10479);
        mpfr_init(r10480);
        mpfr_init(r10481);
        mpfr_init(r10482);
        mpfr_init_set_str(r10483, "1", 10, MPFR_RNDN);
        mpfr_init(r10484);
        mpfr_init(r10485);
        mpfr_init(r10486);
        mpfr_init(r10487);
        mpfr_init(r10488);
        mpfr_init(r10489);
        mpfr_init(r10490);
        mpfr_init(r10491);
        mpfr_init(r10492);
        mpfr_init(r10493);
        mpfr_init_set_str(r10494, "-1.5418342753582873e-10", 10, MPFR_RNDN);
        mpfr_init(r10495);
        mpfr_init(r10496);
        mpfr_init(r10497);
        mpfr_init(r10498);
        mpfr_init_set_str(r10499, "1.5079174377527131e+155", 10, MPFR_RNDN);
        mpfr_init(r10500);
        mpfr_init(r10501);
        mpfr_init(r10502);
        mpfr_init(r10503);
        mpfr_init(r10504);
        mpfr_init(r10505);
        mpfr_init(r10506);
        mpfr_init(r10507);
        mpfr_init(r10508);
        mpfr_init(r10509);
        mpfr_init(r10510);
        mpfr_init(r10511);
        mpfr_init(r10512);
}

double f_fm(double a, double b, double eps) {
        mpfr_set_d(r10477, eps, MPFR_RNDN);
        mpfr_set_d(r10478, a, MPFR_RNDN);
        mpfr_set_d(r10479, b, MPFR_RNDN);
        mpfr_add(r10480, r10478, r10479, MPFR_RNDN);
        mpfr_mul(r10481, r10480, r10477, MPFR_RNDN);
        mpfr_exp(r10482, r10481, MPFR_RNDN);
        ;
        mpfr_sub(r10484, r10482, r10483, MPFR_RNDN);
        mpfr_mul(r10485, r10477, r10484, MPFR_RNDN);
        mpfr_mul(r10486, r10478, r10477, MPFR_RNDN);
        mpfr_exp(r10487, r10486, MPFR_RNDN);
        mpfr_sub(r10488, r10487, r10483, MPFR_RNDN);
        mpfr_mul(r10489, r10479, r10477, MPFR_RNDN);
        mpfr_exp(r10490, r10489, MPFR_RNDN);
        mpfr_sub(r10491, r10490, r10483, MPFR_RNDN);
        mpfr_mul(r10492, r10488, r10491, MPFR_RNDN);
        mpfr_div(r10493, r10485, r10492, MPFR_RNDN);
        ;
        mpfr_set_si(r10495, mpfr_cmp(r10493, r10494) <= 0, MPFR_RNDN);
        mpfr_div(r10496, r10483, r10478, MPFR_RNDN);
        mpfr_div(r10497, r10483, r10479, MPFR_RNDN);
        mpfr_add(r10498, r10496, r10497, MPFR_RNDN);
        ;
        mpfr_set_si(r10500, mpfr_cmp(r10493, r10499) <= 0, MPFR_RNDN);
        mpfr_mul(r10501, r10477, r10478, MPFR_RNDN);
        mpfr_expm1(r10502, r10501, MPFR_RNDN);
        mpfr_div(r10503, r10477, r10502, MPFR_RNDN);
        mpfr_add(r10504, r10479, r10478, MPFR_RNDN);
        mpfr_mul(r10505, r10504, r10477, MPFR_RNDN);
        mpfr_expm1(r10506, r10505, MPFR_RNDN);
        mpfr_mul(r10507, r10477, r10479, MPFR_RNDN);
        mpfr_expm1(r10508, r10507, MPFR_RNDN);
        mpfr_div(r10509, r10506, r10508, MPFR_RNDN);
        mpfr_mul(r10510, r10503, r10509, MPFR_RNDN);
        if (mpfr_get_si(r10500, MPFR_RNDN)) { mpfr_set(r10511, r10510, MPFR_RNDN); } else { mpfr_set(r10511, r10498, MPFR_RNDN); };
        if (mpfr_get_si(r10495, MPFR_RNDN)) { mpfr_set(r10512, r10498, MPFR_RNDN); } else { mpfr_set(r10512, r10511, MPFR_RNDN); };
        return mpfr_get_d(r10512, MPFR_RNDN);
}

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

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r10513);
        mpfr_init(r10514);
        mpfr_init(r10515);
        mpfr_init(r10516);
        mpfr_init(r10517);
        mpfr_init(r10518);
        mpfr_init_set_str(r10519, "1", 10, MPFR_RNDN);
        mpfr_init(r10520);
        mpfr_init(r10521);
        mpfr_init(r10522);
        mpfr_init(r10523);
        mpfr_init(r10524);
        mpfr_init(r10525);
        mpfr_init(r10526);
        mpfr_init(r10527);
        mpfr_init(r10528);
        mpfr_init(r10529);
        mpfr_init_set_str(r10530, "-1.5418342753582873e-10", 10, MPFR_RNDN);
        mpfr_init(r10531);
        mpfr_init(r10532);
        mpfr_init(r10533);
        mpfr_init(r10534);
        mpfr_init_set_str(r10535, "1.5079174377527131e+155", 10, MPFR_RNDN);
        mpfr_init(r10536);
        mpfr_init(r10537);
        mpfr_init(r10538);
        mpfr_init(r10539);
        mpfr_init(r10540);
        mpfr_init(r10541);
        mpfr_init(r10542);
        mpfr_init(r10543);
        mpfr_init(r10544);
        mpfr_init(r10545);
        mpfr_init(r10546);
        mpfr_init(r10547);
        mpfr_init(r10548);
}

double f_dm(double a, double b, double eps) {
        mpfr_set_d(r10513, eps, MPFR_RNDN);
        mpfr_set_d(r10514, a, MPFR_RNDN);
        mpfr_set_d(r10515, b, MPFR_RNDN);
        mpfr_add(r10516, r10514, r10515, MPFR_RNDN);
        mpfr_mul(r10517, r10516, r10513, MPFR_RNDN);
        mpfr_exp(r10518, r10517, MPFR_RNDN);
        ;
        mpfr_sub(r10520, r10518, r10519, MPFR_RNDN);
        mpfr_mul(r10521, r10513, r10520, MPFR_RNDN);
        mpfr_mul(r10522, r10514, r10513, MPFR_RNDN);
        mpfr_exp(r10523, r10522, MPFR_RNDN);
        mpfr_sub(r10524, r10523, r10519, MPFR_RNDN);
        mpfr_mul(r10525, r10515, r10513, MPFR_RNDN);
        mpfr_exp(r10526, r10525, MPFR_RNDN);
        mpfr_sub(r10527, r10526, r10519, MPFR_RNDN);
        mpfr_mul(r10528, r10524, r10527, MPFR_RNDN);
        mpfr_div(r10529, r10521, r10528, MPFR_RNDN);
        ;
        mpfr_set_si(r10531, mpfr_cmp(r10529, r10530) <= 0, MPFR_RNDN);
        mpfr_div(r10532, r10519, r10514, MPFR_RNDN);
        mpfr_div(r10533, r10519, r10515, MPFR_RNDN);
        mpfr_add(r10534, r10532, r10533, MPFR_RNDN);
        ;
        mpfr_set_si(r10536, mpfr_cmp(r10529, r10535) <= 0, MPFR_RNDN);
        mpfr_mul(r10537, r10513, r10514, MPFR_RNDN);
        mpfr_expm1(r10538, r10537, MPFR_RNDN);
        mpfr_div(r10539, r10513, r10538, MPFR_RNDN);
        mpfr_add(r10540, r10515, r10514, MPFR_RNDN);
        mpfr_mul(r10541, r10540, r10513, MPFR_RNDN);
        mpfr_expm1(r10542, r10541, MPFR_RNDN);
        mpfr_mul(r10543, r10513, r10515, MPFR_RNDN);
        mpfr_expm1(r10544, r10543, MPFR_RNDN);
        mpfr_div(r10545, r10542, r10544, MPFR_RNDN);
        mpfr_mul(r10546, r10539, r10545, MPFR_RNDN);
        if (mpfr_get_si(r10536, MPFR_RNDN)) { mpfr_set(r10547, r10546, MPFR_RNDN); } else { mpfr_set(r10547, r10534, MPFR_RNDN); };
        if (mpfr_get_si(r10531, MPFR_RNDN)) { mpfr_set(r10548, r10534, MPFR_RNDN); } else { mpfr_set(r10548, r10547, MPFR_RNDN); };
        return mpfr_get_d(r10548, MPFR_RNDN);
}

