#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 r10324 = eps;
        float r10325 = a;
        float r10326 = b;
        float r10327 = r10325 + r10326;
        float r10328 = r10327 * r10324;
        float r10329 = exp(r10328);
        float r10330 = 1;
        float r10331 = r10329 - r10330;
        float r10332 = r10324 * r10331;
        float r10333 = r10325 * r10324;
        float r10334 = exp(r10333);
        float r10335 = r10334 - r10330;
        float r10336 = r10326 * r10324;
        float r10337 = exp(r10336);
        float r10338 = r10337 - r10330;
        float r10339 = r10335 * r10338;
        float r10340 = r10332 / r10339;
        return r10340;
}

double f_id(double a, double b, double eps) {
        double r10341 = eps;
        double r10342 = a;
        double r10343 = b;
        double r10344 = r10342 + r10343;
        double r10345 = r10344 * r10341;
        double r10346 = exp(r10345);
        double r10347 = 1;
        double r10348 = r10346 - r10347;
        double r10349 = r10341 * r10348;
        double r10350 = r10342 * r10341;
        double r10351 = exp(r10350);
        double r10352 = r10351 - r10347;
        double r10353 = r10343 * r10341;
        double r10354 = exp(r10353);
        double r10355 = r10354 - r10347;
        double r10356 = r10352 * r10355;
        double r10357 = r10349 / r10356;
        return r10357;
}


double f_of(float a, float b, float eps) {
        float r10358 = eps;
        float r10359 = a;
        float r10360 = b;
        float r10361 = r10359 + r10360;
        float r10362 = r10361 * r10358;
        float r10363 = exp(r10362);
        float r10364 = 1;
        float r10365 = r10363 - r10364;
        float r10366 = r10358 * r10365;
        float r10367 = r10359 * r10358;
        float r10368 = exp(r10367);
        float r10369 = r10368 - r10364;
        float r10370 = r10360 * r10358;
        float r10371 = exp(r10370);
        float r10372 = r10371 - r10364;
        float r10373 = r10369 * r10372;
        float r10374 = r10366 / r10373;
        float r10375 = -0.050754319712540484;
        bool r10376 = r10374 <= r10375;
        float r10377 = r10364 / r10359;
        float r10378 = r10364 / r10360;
        float r10379 = r10377 + r10378;
        float r10380 = 1.2585875185895729e+61;
        bool r10381 = r10374 <= r10380;
        float r10382 = exp(r10372);
        float r10383 = log(r10382);
        float r10384 = r10369 * r10383;
        float r10385 = r10366 / r10384;
        float r10386 = r10381 ? r10385 : r10379;
        float r10387 = r10376 ? r10379 : r10386;
        return r10387;
}

double f_od(double a, double b, double eps) {
        double r10388 = eps;
        double r10389 = a;
        double r10390 = b;
        double r10391 = r10389 + r10390;
        double r10392 = r10391 * r10388;
        double r10393 = exp(r10392);
        double r10394 = 1;
        double r10395 = r10393 - r10394;
        double r10396 = r10388 * r10395;
        double r10397 = r10389 * r10388;
        double r10398 = exp(r10397);
        double r10399 = r10398 - r10394;
        double r10400 = r10390 * r10388;
        double r10401 = exp(r10400);
        double r10402 = r10401 - r10394;
        double r10403 = r10399 * r10402;
        double r10404 = r10396 / r10403;
        double r10405 = -0.050754319712540484;
        bool r10406 = r10404 <= r10405;
        double r10407 = r10394 / r10389;
        double r10408 = r10394 / r10390;
        double r10409 = r10407 + r10408;
        double r10410 = 1.2585875185895729e+61;
        bool r10411 = r10404 <= r10410;
        double r10412 = exp(r10402);
        double r10413 = log(r10412);
        double r10414 = r10399 * r10413;
        double r10415 = r10396 / r10414;
        double r10416 = r10411 ? r10415 : r10409;
        double r10417 = r10406 ? r10409 : r10416;
        return r10417;
}

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 r10418, r10419, r10420, r10421, r10422, r10423, r10424, r10425, r10426, r10427, r10428, r10429, r10430, r10431, r10432, r10433, r10434;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2384);
        mpfr_init(r10418);
        mpfr_init(r10419);
        mpfr_init(r10420);
        mpfr_init(r10421);
        mpfr_init(r10422);
        mpfr_init(r10423);
        mpfr_init_set_str(r10424, "1", 10, MPFR_RNDN);
        mpfr_init(r10425);
        mpfr_init(r10426);
        mpfr_init(r10427);
        mpfr_init(r10428);
        mpfr_init(r10429);
        mpfr_init(r10430);
        mpfr_init(r10431);
        mpfr_init(r10432);
        mpfr_init(r10433);
        mpfr_init(r10434);
}

double f_im(double a, double b, double eps) {
        mpfr_set_d(r10418, eps, MPFR_RNDN);
        mpfr_set_d(r10419, a, MPFR_RNDN);
        mpfr_set_d(r10420, b, MPFR_RNDN);
        mpfr_add(r10421, r10419, r10420, MPFR_RNDN);
        mpfr_mul(r10422, r10421, r10418, MPFR_RNDN);
        mpfr_exp(r10423, r10422, MPFR_RNDN);
        ;
        mpfr_sub(r10425, r10423, r10424, MPFR_RNDN);
        mpfr_mul(r10426, r10418, r10425, MPFR_RNDN);
        mpfr_mul(r10427, r10419, r10418, MPFR_RNDN);
        mpfr_exp(r10428, r10427, MPFR_RNDN);
        mpfr_sub(r10429, r10428, r10424, MPFR_RNDN);
        mpfr_mul(r10430, r10420, r10418, MPFR_RNDN);
        mpfr_exp(r10431, r10430, MPFR_RNDN);
        mpfr_sub(r10432, r10431, r10424, MPFR_RNDN);
        mpfr_mul(r10433, r10429, r10432, MPFR_RNDN);
        mpfr_div(r10434, r10426, r10433, MPFR_RNDN);
        return mpfr_get_d(r10434, MPFR_RNDN);
}

static mpfr_t r10435, r10436, r10437, r10438, r10439, r10440, r10441, r10442, r10443, r10444, r10445, r10446, r10447, r10448, r10449, r10450, r10451, r10452, r10453, r10454, r10455, r10456, r10457, r10458, r10459, r10460, r10461, r10462, r10463, r10464;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r10435);
        mpfr_init(r10436);
        mpfr_init(r10437);
        mpfr_init(r10438);
        mpfr_init(r10439);
        mpfr_init(r10440);
        mpfr_init_set_str(r10441, "1", 10, MPFR_RNDN);
        mpfr_init(r10442);
        mpfr_init(r10443);
        mpfr_init(r10444);
        mpfr_init(r10445);
        mpfr_init(r10446);
        mpfr_init(r10447);
        mpfr_init(r10448);
        mpfr_init(r10449);
        mpfr_init(r10450);
        mpfr_init(r10451);
        mpfr_init_set_str(r10452, "-0.050754319712540484", 10, MPFR_RNDN);
        mpfr_init(r10453);
        mpfr_init(r10454);
        mpfr_init(r10455);
        mpfr_init(r10456);
        mpfr_init_set_str(r10457, "1.2585875185895729e+61", 10, MPFR_RNDN);
        mpfr_init(r10458);
        mpfr_init(r10459);
        mpfr_init(r10460);
        mpfr_init(r10461);
        mpfr_init(r10462);
        mpfr_init(r10463);
        mpfr_init(r10464);
}

double f_fm(double a, double b, double eps) {
        mpfr_set_d(r10435, eps, MPFR_RNDN);
        mpfr_set_d(r10436, a, MPFR_RNDN);
        mpfr_set_d(r10437, b, MPFR_RNDN);
        mpfr_add(r10438, r10436, r10437, MPFR_RNDN);
        mpfr_mul(r10439, r10438, r10435, MPFR_RNDN);
        mpfr_exp(r10440, r10439, MPFR_RNDN);
        ;
        mpfr_sub(r10442, r10440, r10441, MPFR_RNDN);
        mpfr_mul(r10443, r10435, r10442, MPFR_RNDN);
        mpfr_mul(r10444, r10436, r10435, MPFR_RNDN);
        mpfr_exp(r10445, r10444, MPFR_RNDN);
        mpfr_sub(r10446, r10445, r10441, MPFR_RNDN);
        mpfr_mul(r10447, r10437, r10435, MPFR_RNDN);
        mpfr_exp(r10448, r10447, MPFR_RNDN);
        mpfr_sub(r10449, r10448, r10441, MPFR_RNDN);
        mpfr_mul(r10450, r10446, r10449, MPFR_RNDN);
        mpfr_div(r10451, r10443, r10450, MPFR_RNDN);
        ;
        mpfr_set_si(r10453, mpfr_cmp(r10451, r10452) <= 0, MPFR_RNDN);
        mpfr_div(r10454, r10441, r10436, MPFR_RNDN);
        mpfr_div(r10455, r10441, r10437, MPFR_RNDN);
        mpfr_add(r10456, r10454, r10455, MPFR_RNDN);
        ;
        mpfr_set_si(r10458, mpfr_cmp(r10451, r10457) <= 0, MPFR_RNDN);
        mpfr_exp(r10459, r10449, MPFR_RNDN);
        mpfr_log(r10460, r10459, MPFR_RNDN);
        mpfr_mul(r10461, r10446, r10460, MPFR_RNDN);
        mpfr_div(r10462, r10443, r10461, MPFR_RNDN);
        if (mpfr_get_si(r10458, MPFR_RNDN)) { mpfr_set(r10463, r10462, MPFR_RNDN); } else { mpfr_set(r10463, r10456, MPFR_RNDN); };
        if (mpfr_get_si(r10453, MPFR_RNDN)) { mpfr_set(r10464, r10456, MPFR_RNDN); } else { mpfr_set(r10464, r10463, MPFR_RNDN); };
        return mpfr_get_d(r10464, MPFR_RNDN);
}

static mpfr_t r10465, r10466, r10467, r10468, r10469, r10470, r10471, r10472, r10473, r10474, r10475, r10476, r10477, r10478, r10479, r10480, r10481, r10482, r10483, r10484, r10485, r10486, r10487, r10488, r10489, r10490, r10491, r10492, r10493, r10494;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r10465);
        mpfr_init(r10466);
        mpfr_init(r10467);
        mpfr_init(r10468);
        mpfr_init(r10469);
        mpfr_init(r10470);
        mpfr_init_set_str(r10471, "1", 10, MPFR_RNDN);
        mpfr_init(r10472);
        mpfr_init(r10473);
        mpfr_init(r10474);
        mpfr_init(r10475);
        mpfr_init(r10476);
        mpfr_init(r10477);
        mpfr_init(r10478);
        mpfr_init(r10479);
        mpfr_init(r10480);
        mpfr_init(r10481);
        mpfr_init_set_str(r10482, "-0.050754319712540484", 10, MPFR_RNDN);
        mpfr_init(r10483);
        mpfr_init(r10484);
        mpfr_init(r10485);
        mpfr_init(r10486);
        mpfr_init_set_str(r10487, "1.2585875185895729e+61", 10, MPFR_RNDN);
        mpfr_init(r10488);
        mpfr_init(r10489);
        mpfr_init(r10490);
        mpfr_init(r10491);
        mpfr_init(r10492);
        mpfr_init(r10493);
        mpfr_init(r10494);
}

double f_dm(double a, double b, double eps) {
        mpfr_set_d(r10465, eps, MPFR_RNDN);
        mpfr_set_d(r10466, a, MPFR_RNDN);
        mpfr_set_d(r10467, b, MPFR_RNDN);
        mpfr_add(r10468, r10466, r10467, MPFR_RNDN);
        mpfr_mul(r10469, r10468, r10465, MPFR_RNDN);
        mpfr_exp(r10470, r10469, MPFR_RNDN);
        ;
        mpfr_sub(r10472, r10470, r10471, MPFR_RNDN);
        mpfr_mul(r10473, r10465, r10472, MPFR_RNDN);
        mpfr_mul(r10474, r10466, r10465, MPFR_RNDN);
        mpfr_exp(r10475, r10474, MPFR_RNDN);
        mpfr_sub(r10476, r10475, r10471, MPFR_RNDN);
        mpfr_mul(r10477, r10467, r10465, MPFR_RNDN);
        mpfr_exp(r10478, r10477, MPFR_RNDN);
        mpfr_sub(r10479, r10478, r10471, MPFR_RNDN);
        mpfr_mul(r10480, r10476, r10479, MPFR_RNDN);
        mpfr_div(r10481, r10473, r10480, MPFR_RNDN);
        ;
        mpfr_set_si(r10483, mpfr_cmp(r10481, r10482) <= 0, MPFR_RNDN);
        mpfr_div(r10484, r10471, r10466, MPFR_RNDN);
        mpfr_div(r10485, r10471, r10467, MPFR_RNDN);
        mpfr_add(r10486, r10484, r10485, MPFR_RNDN);
        ;
        mpfr_set_si(r10488, mpfr_cmp(r10481, r10487) <= 0, MPFR_RNDN);
        mpfr_exp(r10489, r10479, MPFR_RNDN);
        mpfr_log(r10490, r10489, MPFR_RNDN);
        mpfr_mul(r10491, r10476, r10490, MPFR_RNDN);
        mpfr_div(r10492, r10473, r10491, MPFR_RNDN);
        if (mpfr_get_si(r10488, MPFR_RNDN)) { mpfr_set(r10493, r10492, MPFR_RNDN); } else { mpfr_set(r10493, r10486, MPFR_RNDN); };
        if (mpfr_get_si(r10483, MPFR_RNDN)) { mpfr_set(r10494, r10486, MPFR_RNDN); } else { mpfr_set(r10494, r10493, MPFR_RNDN); };
        return mpfr_get_d(r10494, MPFR_RNDN);
}

