#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 r26793 = eps;
        float r26794 = a;
        float r26795 = b;
        float r26796 = r26794 + r26795;
        float r26797 = r26796 * r26793;
        float r26798 = exp(r26797);
        float r26799 = 1;
        float r26800 = r26798 - r26799;
        float r26801 = r26793 * r26800;
        float r26802 = r26794 * r26793;
        float r26803 = exp(r26802);
        float r26804 = r26803 - r26799;
        float r26805 = r26795 * r26793;
        float r26806 = exp(r26805);
        float r26807 = r26806 - r26799;
        float r26808 = r26804 * r26807;
        float r26809 = r26801 / r26808;
        return r26809;
}

double f_id(double a, double b, double eps) {
        double r26810 = eps;
        double r26811 = a;
        double r26812 = b;
        double r26813 = r26811 + r26812;
        double r26814 = r26813 * r26810;
        double r26815 = exp(r26814);
        double r26816 = 1;
        double r26817 = r26815 - r26816;
        double r26818 = r26810 * r26817;
        double r26819 = r26811 * r26810;
        double r26820 = exp(r26819);
        double r26821 = r26820 - r26816;
        double r26822 = r26812 * r26810;
        double r26823 = exp(r26822);
        double r26824 = r26823 - r26816;
        double r26825 = r26821 * r26824;
        double r26826 = r26818 / r26825;
        return r26826;
}


double f_of(float a, float b, float eps) {
        float r26827 = eps;
        float r26828 = a;
        float r26829 = b;
        float r26830 = r26828 + r26829;
        float r26831 = r26830 * r26827;
        float r26832 = exp(r26831);
        float r26833 = 1;
        float r26834 = r26832 - r26833;
        float r26835 = r26827 * r26834;
        float r26836 = r26828 * r26827;
        float r26837 = exp(r26836);
        float r26838 = r26837 - r26833;
        float r26839 = r26829 * r26827;
        float r26840 = exp(r26839);
        float r26841 = r26840 - r26833;
        float r26842 = r26838 * r26841;
        float r26843 = r26835 / r26842;
        float r26844 = -1.7827258738114223e+308;
        bool r26845 = r26843 <= r26844;
        float r26846 = r26833 / r26829;
        float r26847 = r26833 / r26828;
        float r26848 = r26846 + r26847;
        float r26849 = 2.1049162263209416e-29;
        bool r26850 = r26843 <= r26849;
        float r26851 = r26850 ? r26843 : r26848;
        float r26852 = r26845 ? r26848 : r26851;
        return r26852;
}

double f_od(double a, double b, double eps) {
        double r26853 = eps;
        double r26854 = a;
        double r26855 = b;
        double r26856 = r26854 + r26855;
        double r26857 = r26856 * r26853;
        double r26858 = exp(r26857);
        double r26859 = 1;
        double r26860 = r26858 - r26859;
        double r26861 = r26853 * r26860;
        double r26862 = r26854 * r26853;
        double r26863 = exp(r26862);
        double r26864 = r26863 - r26859;
        double r26865 = r26855 * r26853;
        double r26866 = exp(r26865);
        double r26867 = r26866 - r26859;
        double r26868 = r26864 * r26867;
        double r26869 = r26861 / r26868;
        double r26870 = -1.7827258738114223e+308;
        bool r26871 = r26869 <= r26870;
        double r26872 = r26859 / r26855;
        double r26873 = r26859 / r26854;
        double r26874 = r26872 + r26873;
        double r26875 = 2.1049162263209416e-29;
        bool r26876 = r26869 <= r26875;
        double r26877 = r26876 ? r26869 : r26874;
        double r26878 = r26871 ? r26874 : r26877;
        return r26878;
}

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 r26879, r26880, r26881, r26882, r26883, r26884, r26885, r26886, r26887, r26888, r26889, r26890, r26891, r26892, r26893, r26894, r26895;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2384);
        mpfr_init(r26879);
        mpfr_init(r26880);
        mpfr_init(r26881);
        mpfr_init(r26882);
        mpfr_init(r26883);
        mpfr_init(r26884);
        mpfr_init_set_str(r26885, "1", 10, MPFR_RNDN);
        mpfr_init(r26886);
        mpfr_init(r26887);
        mpfr_init(r26888);
        mpfr_init(r26889);
        mpfr_init(r26890);
        mpfr_init(r26891);
        mpfr_init(r26892);
        mpfr_init(r26893);
        mpfr_init(r26894);
        mpfr_init(r26895);
}

double f_im(double a, double b, double eps) {
        mpfr_set_d(r26879, eps, MPFR_RNDN);
        mpfr_set_d(r26880, a, MPFR_RNDN);
        mpfr_set_d(r26881, b, MPFR_RNDN);
        mpfr_add(r26882, r26880, r26881, MPFR_RNDN);
        mpfr_mul(r26883, r26882, r26879, MPFR_RNDN);
        mpfr_exp(r26884, r26883, MPFR_RNDN);
        ;
        mpfr_sub(r26886, r26884, r26885, MPFR_RNDN);
        mpfr_mul(r26887, r26879, r26886, MPFR_RNDN);
        mpfr_mul(r26888, r26880, r26879, MPFR_RNDN);
        mpfr_exp(r26889, r26888, MPFR_RNDN);
        mpfr_sub(r26890, r26889, r26885, MPFR_RNDN);
        mpfr_mul(r26891, r26881, r26879, MPFR_RNDN);
        mpfr_exp(r26892, r26891, MPFR_RNDN);
        mpfr_sub(r26893, r26892, r26885, MPFR_RNDN);
        mpfr_mul(r26894, r26890, r26893, MPFR_RNDN);
        mpfr_div(r26895, r26887, r26894, MPFR_RNDN);
        return mpfr_get_d(r26895, MPFR_RNDN);
}

static mpfr_t r26896, r26897, r26898, r26899, r26900, r26901, r26902, r26903, r26904, r26905, r26906, r26907, r26908, r26909, r26910, r26911, r26912, r26913, r26914, r26915, r26916, r26917, r26918, r26919, r26920, r26921;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r26896);
        mpfr_init(r26897);
        mpfr_init(r26898);
        mpfr_init(r26899);
        mpfr_init(r26900);
        mpfr_init(r26901);
        mpfr_init_set_str(r26902, "1", 10, MPFR_RNDN);
        mpfr_init(r26903);
        mpfr_init(r26904);
        mpfr_init(r26905);
        mpfr_init(r26906);
        mpfr_init(r26907);
        mpfr_init(r26908);
        mpfr_init(r26909);
        mpfr_init(r26910);
        mpfr_init(r26911);
        mpfr_init(r26912);
        mpfr_init_set_str(r26913, "-1.7827258738114223e+308", 10, MPFR_RNDN);
        mpfr_init(r26914);
        mpfr_init(r26915);
        mpfr_init(r26916);
        mpfr_init(r26917);
        mpfr_init_set_str(r26918, "2.1049162263209416e-29", 10, MPFR_RNDN);
        mpfr_init(r26919);
        mpfr_init(r26920);
        mpfr_init(r26921);
}

double f_fm(double a, double b, double eps) {
        mpfr_set_d(r26896, eps, MPFR_RNDN);
        mpfr_set_d(r26897, a, MPFR_RNDN);
        mpfr_set_d(r26898, b, MPFR_RNDN);
        mpfr_add(r26899, r26897, r26898, MPFR_RNDN);
        mpfr_mul(r26900, r26899, r26896, MPFR_RNDN);
        mpfr_exp(r26901, r26900, MPFR_RNDN);
        ;
        mpfr_sub(r26903, r26901, r26902, MPFR_RNDN);
        mpfr_mul(r26904, r26896, r26903, MPFR_RNDN);
        mpfr_mul(r26905, r26897, r26896, MPFR_RNDN);
        mpfr_exp(r26906, r26905, MPFR_RNDN);
        mpfr_sub(r26907, r26906, r26902, MPFR_RNDN);
        mpfr_mul(r26908, r26898, r26896, MPFR_RNDN);
        mpfr_exp(r26909, r26908, MPFR_RNDN);
        mpfr_sub(r26910, r26909, r26902, MPFR_RNDN);
        mpfr_mul(r26911, r26907, r26910, MPFR_RNDN);
        mpfr_div(r26912, r26904, r26911, MPFR_RNDN);
        ;
        mpfr_set_si(r26914, mpfr_cmp(r26912, r26913) <= 0, MPFR_RNDN);
        mpfr_div(r26915, r26902, r26898, MPFR_RNDN);
        mpfr_div(r26916, r26902, r26897, MPFR_RNDN);
        mpfr_add(r26917, r26915, r26916, MPFR_RNDN);
        ;
        mpfr_set_si(r26919, mpfr_cmp(r26912, r26918) <= 0, MPFR_RNDN);
        if (mpfr_get_si(r26919, MPFR_RNDN)) { mpfr_set(r26920, r26912, MPFR_RNDN); } else { mpfr_set(r26920, r26917, MPFR_RNDN); };
        if (mpfr_get_si(r26914, MPFR_RNDN)) { mpfr_set(r26921, r26917, MPFR_RNDN); } else { mpfr_set(r26921, r26920, MPFR_RNDN); };
        return mpfr_get_d(r26921, MPFR_RNDN);
}

static mpfr_t r26922, r26923, r26924, r26925, r26926, r26927, r26928, r26929, r26930, r26931, r26932, r26933, r26934, r26935, r26936, r26937, r26938, r26939, r26940, r26941, r26942, r26943, r26944, r26945, r26946, r26947;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r26922);
        mpfr_init(r26923);
        mpfr_init(r26924);
        mpfr_init(r26925);
        mpfr_init(r26926);
        mpfr_init(r26927);
        mpfr_init_set_str(r26928, "1", 10, MPFR_RNDN);
        mpfr_init(r26929);
        mpfr_init(r26930);
        mpfr_init(r26931);
        mpfr_init(r26932);
        mpfr_init(r26933);
        mpfr_init(r26934);
        mpfr_init(r26935);
        mpfr_init(r26936);
        mpfr_init(r26937);
        mpfr_init(r26938);
        mpfr_init_set_str(r26939, "-1.7827258738114223e+308", 10, MPFR_RNDN);
        mpfr_init(r26940);
        mpfr_init(r26941);
        mpfr_init(r26942);
        mpfr_init(r26943);
        mpfr_init_set_str(r26944, "2.1049162263209416e-29", 10, MPFR_RNDN);
        mpfr_init(r26945);
        mpfr_init(r26946);
        mpfr_init(r26947);
}

double f_dm(double a, double b, double eps) {
        mpfr_set_d(r26922, eps, MPFR_RNDN);
        mpfr_set_d(r26923, a, MPFR_RNDN);
        mpfr_set_d(r26924, b, MPFR_RNDN);
        mpfr_add(r26925, r26923, r26924, MPFR_RNDN);
        mpfr_mul(r26926, r26925, r26922, MPFR_RNDN);
        mpfr_exp(r26927, r26926, MPFR_RNDN);
        ;
        mpfr_sub(r26929, r26927, r26928, MPFR_RNDN);
        mpfr_mul(r26930, r26922, r26929, MPFR_RNDN);
        mpfr_mul(r26931, r26923, r26922, MPFR_RNDN);
        mpfr_exp(r26932, r26931, MPFR_RNDN);
        mpfr_sub(r26933, r26932, r26928, MPFR_RNDN);
        mpfr_mul(r26934, r26924, r26922, MPFR_RNDN);
        mpfr_exp(r26935, r26934, MPFR_RNDN);
        mpfr_sub(r26936, r26935, r26928, MPFR_RNDN);
        mpfr_mul(r26937, r26933, r26936, MPFR_RNDN);
        mpfr_div(r26938, r26930, r26937, MPFR_RNDN);
        ;
        mpfr_set_si(r26940, mpfr_cmp(r26938, r26939) <= 0, MPFR_RNDN);
        mpfr_div(r26941, r26928, r26924, MPFR_RNDN);
        mpfr_div(r26942, r26928, r26923, MPFR_RNDN);
        mpfr_add(r26943, r26941, r26942, MPFR_RNDN);
        ;
        mpfr_set_si(r26945, mpfr_cmp(r26938, r26944) <= 0, MPFR_RNDN);
        if (mpfr_get_si(r26945, MPFR_RNDN)) { mpfr_set(r26946, r26938, MPFR_RNDN); } else { mpfr_set(r26946, r26943, MPFR_RNDN); };
        if (mpfr_get_si(r26940, MPFR_RNDN)) { mpfr_set(r26947, r26943, MPFR_RNDN); } else { mpfr_set(r26947, r26946, MPFR_RNDN); };
        return mpfr_get_d(r26947, MPFR_RNDN);
}

