#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 r10111 = eps;
        float r10112 = a;
        float r10113 = b;
        float r10114 = r10112 + r10113;
        float r10115 = r10114 * r10111;
        float r10116 = exp(r10115);
        float r10117 = 1.0f;
        float r10118 = r10116 - r10117;
        float r10119 = r10111 * r10118;
        float r10120 = r10112 * r10111;
        float r10121 = exp(r10120);
        float r10122 = r10121 - r10117;
        float r10123 = r10113 * r10111;
        float r10124 = exp(r10123);
        float r10125 = r10124 - r10117;
        float r10126 = r10122 * r10125;
        float r10127 = r10119 / r10126;
        return r10127;
}

double f_id(double a, double b, double eps) {
        double r10128 = eps;
        double r10129 = a;
        double r10130 = b;
        double r10131 = r10129 + r10130;
        double r10132 = r10131 * r10128;
        double r10133 = exp(r10132);
        double r10134 = 1.0;
        double r10135 = r10133 - r10134;
        double r10136 = r10128 * r10135;
        double r10137 = r10129 * r10128;
        double r10138 = exp(r10137);
        double r10139 = r10138 - r10134;
        double r10140 = r10130 * r10128;
        double r10141 = exp(r10140);
        double r10142 = r10141 - r10134;
        double r10143 = r10139 * r10142;
        double r10144 = r10136 / r10143;
        return r10144;
}


double f_of(float a, float b, float eps) {
        float r10145 = a;
        float r10146 = b;
        float r10147 = r10145 + r10146;
        float r10148 = eps;
        float r10149 = r10147 * r10148;
        float r10150 = exp(r10149);
        float r10151 = 1.0f;
        float r10152 = r10150 - r10151;
        float r10153 = r10152 * r10148;
        float r10154 = r10148 * r10146;
        float r10155 = exp(r10154);
        float r10156 = r10155 - r10151;
        float r10157 = r10148 * r10145;
        float r10158 = exp(r10157);
        float r10159 = r10158 - r10151;
        float r10160 = r10156 * r10159;
        float r10161 = r10153 / r10160;
        float r10162 = -4.717656556639609e-22f;
        bool r10163 = r10161 <= r10162;
        float r10164 = r10151 / r10146;
        float r10165 = r10151 / r10145;
        float r10166 = r10164 + r10165;
        float r10167 = 1.7817055403717436e+308f;
        bool r10168 = r10161 <= r10167;
        float r10169 = expm1(r10157);
        float r10170 = r10148 / r10169;
        float r10171 = expm1(r10149);
        float r10172 = expm1(r10154);
        float r10173 = r10171 / r10172;
        float r10174 = r10170 * r10173;
        float r10175 = r10168 ? r10174 : r10166;
        float r10176 = r10163 ? r10166 : r10175;
        return r10176;
}

double f_od(double a, double b, double eps) {
        double r10177 = a;
        double r10178 = b;
        double r10179 = r10177 + r10178;
        double r10180 = eps;
        double r10181 = r10179 * r10180;
        double r10182 = exp(r10181);
        double r10183 = 1.0;
        double r10184 = r10182 - r10183;
        double r10185 = r10184 * r10180;
        double r10186 = r10180 * r10178;
        double r10187 = exp(r10186);
        double r10188 = r10187 - r10183;
        double r10189 = r10180 * r10177;
        double r10190 = exp(r10189);
        double r10191 = r10190 - r10183;
        double r10192 = r10188 * r10191;
        double r10193 = r10185 / r10192;
        double r10194 = -4.717656556639609e-22;
        bool r10195 = r10193 <= r10194;
        double r10196 = r10183 / r10178;
        double r10197 = r10183 / r10177;
        double r10198 = r10196 + r10197;
        double r10199 = 1.7817055403717436e+308;
        bool r10200 = r10193 <= r10199;
        double r10201 = expm1(r10189);
        double r10202 = r10180 / r10201;
        double r10203 = expm1(r10181);
        double r10204 = expm1(r10186);
        double r10205 = r10203 / r10204;
        double r10206 = r10202 * r10205;
        double r10207 = r10200 ? r10206 : r10198;
        double r10208 = r10195 ? r10198 : r10207;
        return r10208;
}

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 r10209, r10210, r10211, r10212, r10213, r10214, r10215, r10216, r10217, r10218, r10219, r10220, r10221, r10222, r10223, r10224, r10225;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2384);
        mpfr_init(r10209);
        mpfr_init(r10210);
        mpfr_init(r10211);
        mpfr_init(r10212);
        mpfr_init(r10213);
        mpfr_init(r10214);
        mpfr_init_set_str(r10215, "1", 10, MPFR_RNDN);
        mpfr_init(r10216);
        mpfr_init(r10217);
        mpfr_init(r10218);
        mpfr_init(r10219);
        mpfr_init(r10220);
        mpfr_init(r10221);
        mpfr_init(r10222);
        mpfr_init(r10223);
        mpfr_init(r10224);
        mpfr_init(r10225);
}

double f_im(double a, double b, double eps) {
        mpfr_set_d(r10209, eps, MPFR_RNDN);
        mpfr_set_d(r10210, a, MPFR_RNDN);
        mpfr_set_d(r10211, b, MPFR_RNDN);
        mpfr_add(r10212, r10210, r10211, MPFR_RNDN);
        mpfr_mul(r10213, r10212, r10209, MPFR_RNDN);
        mpfr_exp(r10214, r10213, MPFR_RNDN);
        ;
        mpfr_sub(r10216, r10214, r10215, MPFR_RNDN);
        mpfr_mul(r10217, r10209, r10216, MPFR_RNDN);
        mpfr_mul(r10218, r10210, r10209, MPFR_RNDN);
        mpfr_exp(r10219, r10218, MPFR_RNDN);
        mpfr_sub(r10220, r10219, r10215, MPFR_RNDN);
        mpfr_mul(r10221, r10211, r10209, MPFR_RNDN);
        mpfr_exp(r10222, r10221, MPFR_RNDN);
        mpfr_sub(r10223, r10222, r10215, MPFR_RNDN);
        mpfr_mul(r10224, r10220, r10223, MPFR_RNDN);
        mpfr_div(r10225, r10217, r10224, MPFR_RNDN);
        return mpfr_get_d(r10225, MPFR_RNDN);
}

static mpfr_t r10226, r10227, r10228, r10229, r10230, r10231, r10232, r10233, r10234, r10235, r10236, r10237, r10238, r10239, r10240, r10241, r10242, r10243, r10244, r10245, r10246, r10247, r10248, r10249, r10250, r10251, r10252, r10253, r10254, r10255, r10256, r10257;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r10226);
        mpfr_init(r10227);
        mpfr_init(r10228);
        mpfr_init(r10229);
        mpfr_init(r10230);
        mpfr_init(r10231);
        mpfr_init_set_str(r10232, "1", 10, MPFR_RNDN);
        mpfr_init(r10233);
        mpfr_init(r10234);
        mpfr_init(r10235);
        mpfr_init(r10236);
        mpfr_init(r10237);
        mpfr_init(r10238);
        mpfr_init(r10239);
        mpfr_init(r10240);
        mpfr_init(r10241);
        mpfr_init(r10242);
        mpfr_init_set_str(r10243, "-4.717656556639609e-22", 10, MPFR_RNDN);
        mpfr_init(r10244);
        mpfr_init(r10245);
        mpfr_init(r10246);
        mpfr_init(r10247);
        mpfr_init_set_str(r10248, "1.7817055403717436e+308", 10, MPFR_RNDN);
        mpfr_init(r10249);
        mpfr_init(r10250);
        mpfr_init(r10251);
        mpfr_init(r10252);
        mpfr_init(r10253);
        mpfr_init(r10254);
        mpfr_init(r10255);
        mpfr_init(r10256);
        mpfr_init(r10257);
}

double f_fm(double a, double b, double eps) {
        mpfr_set_d(r10226, a, MPFR_RNDN);
        mpfr_set_d(r10227, b, MPFR_RNDN);
        mpfr_add(r10228, r10226, r10227, MPFR_RNDN);
        mpfr_set_d(r10229, eps, MPFR_RNDN);
        mpfr_mul(r10230, r10228, r10229, MPFR_RNDN);
        mpfr_exp(r10231, r10230, MPFR_RNDN);
        ;
        mpfr_sub(r10233, r10231, r10232, MPFR_RNDN);
        mpfr_mul(r10234, r10233, r10229, MPFR_RNDN);
        mpfr_mul(r10235, r10229, r10227, MPFR_RNDN);
        mpfr_exp(r10236, r10235, MPFR_RNDN);
        mpfr_sub(r10237, r10236, r10232, MPFR_RNDN);
        mpfr_mul(r10238, r10229, r10226, MPFR_RNDN);
        mpfr_exp(r10239, r10238, MPFR_RNDN);
        mpfr_sub(r10240, r10239, r10232, MPFR_RNDN);
        mpfr_mul(r10241, r10237, r10240, MPFR_RNDN);
        mpfr_div(r10242, r10234, r10241, MPFR_RNDN);
        ;
        mpfr_set_si(r10244, mpfr_cmp(r10242, r10243) <= 0, MPFR_RNDN);
        mpfr_div(r10245, r10232, r10227, MPFR_RNDN);
        mpfr_div(r10246, r10232, r10226, MPFR_RNDN);
        mpfr_add(r10247, r10245, r10246, MPFR_RNDN);
        ;
        mpfr_set_si(r10249, mpfr_cmp(r10242, r10248) <= 0, MPFR_RNDN);
        mpfr_expm1(r10250, r10238, MPFR_RNDN);
        mpfr_div(r10251, r10229, r10250, MPFR_RNDN);
        mpfr_expm1(r10252, r10230, MPFR_RNDN);
        mpfr_expm1(r10253, r10235, MPFR_RNDN);
        mpfr_div(r10254, r10252, r10253, MPFR_RNDN);
        mpfr_mul(r10255, r10251, r10254, MPFR_RNDN);
        if (mpfr_get_si(r10249, MPFR_RNDN)) { mpfr_set(r10256, r10255, MPFR_RNDN); } else { mpfr_set(r10256, r10247, MPFR_RNDN); };
        if (mpfr_get_si(r10244, MPFR_RNDN)) { mpfr_set(r10257, r10247, MPFR_RNDN); } else { mpfr_set(r10257, r10256, MPFR_RNDN); };
        return mpfr_get_d(r10257, MPFR_RNDN);
}

static mpfr_t r10258, r10259, r10260, r10261, r10262, r10263, r10264, r10265, r10266, r10267, r10268, r10269, r10270, r10271, r10272, r10273, r10274, r10275, r10276, r10277, r10278, r10279, r10280, r10281, r10282, r10283, r10284, r10285, r10286, r10287, r10288, r10289;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r10258);
        mpfr_init(r10259);
        mpfr_init(r10260);
        mpfr_init(r10261);
        mpfr_init(r10262);
        mpfr_init(r10263);
        mpfr_init_set_str(r10264, "1", 10, MPFR_RNDN);
        mpfr_init(r10265);
        mpfr_init(r10266);
        mpfr_init(r10267);
        mpfr_init(r10268);
        mpfr_init(r10269);
        mpfr_init(r10270);
        mpfr_init(r10271);
        mpfr_init(r10272);
        mpfr_init(r10273);
        mpfr_init(r10274);
        mpfr_init_set_str(r10275, "-4.717656556639609e-22", 10, MPFR_RNDN);
        mpfr_init(r10276);
        mpfr_init(r10277);
        mpfr_init(r10278);
        mpfr_init(r10279);
        mpfr_init_set_str(r10280, "1.7817055403717436e+308", 10, MPFR_RNDN);
        mpfr_init(r10281);
        mpfr_init(r10282);
        mpfr_init(r10283);
        mpfr_init(r10284);
        mpfr_init(r10285);
        mpfr_init(r10286);
        mpfr_init(r10287);
        mpfr_init(r10288);
        mpfr_init(r10289);
}

double f_dm(double a, double b, double eps) {
        mpfr_set_d(r10258, a, MPFR_RNDN);
        mpfr_set_d(r10259, b, MPFR_RNDN);
        mpfr_add(r10260, r10258, r10259, MPFR_RNDN);
        mpfr_set_d(r10261, eps, MPFR_RNDN);
        mpfr_mul(r10262, r10260, r10261, MPFR_RNDN);
        mpfr_exp(r10263, r10262, MPFR_RNDN);
        ;
        mpfr_sub(r10265, r10263, r10264, MPFR_RNDN);
        mpfr_mul(r10266, r10265, r10261, MPFR_RNDN);
        mpfr_mul(r10267, r10261, r10259, MPFR_RNDN);
        mpfr_exp(r10268, r10267, MPFR_RNDN);
        mpfr_sub(r10269, r10268, r10264, MPFR_RNDN);
        mpfr_mul(r10270, r10261, r10258, MPFR_RNDN);
        mpfr_exp(r10271, r10270, MPFR_RNDN);
        mpfr_sub(r10272, r10271, r10264, MPFR_RNDN);
        mpfr_mul(r10273, r10269, r10272, MPFR_RNDN);
        mpfr_div(r10274, r10266, r10273, MPFR_RNDN);
        ;
        mpfr_set_si(r10276, mpfr_cmp(r10274, r10275) <= 0, MPFR_RNDN);
        mpfr_div(r10277, r10264, r10259, MPFR_RNDN);
        mpfr_div(r10278, r10264, r10258, MPFR_RNDN);
        mpfr_add(r10279, r10277, r10278, MPFR_RNDN);
        ;
        mpfr_set_si(r10281, mpfr_cmp(r10274, r10280) <= 0, MPFR_RNDN);
        mpfr_expm1(r10282, r10270, MPFR_RNDN);
        mpfr_div(r10283, r10261, r10282, MPFR_RNDN);
        mpfr_expm1(r10284, r10262, MPFR_RNDN);
        mpfr_expm1(r10285, r10267, MPFR_RNDN);
        mpfr_div(r10286, r10284, r10285, MPFR_RNDN);
        mpfr_mul(r10287, r10283, r10286, MPFR_RNDN);
        if (mpfr_get_si(r10281, MPFR_RNDN)) { mpfr_set(r10288, r10287, MPFR_RNDN); } else { mpfr_set(r10288, r10279, MPFR_RNDN); };
        if (mpfr_get_si(r10276, MPFR_RNDN)) { mpfr_set(r10289, r10279, MPFR_RNDN); } else { mpfr_set(r10289, r10288, MPFR_RNDN); };
        return mpfr_get_d(r10289, MPFR_RNDN);
}

