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

char *name = "NMSE problem 3.2.1";

double f_if(float a, float b_2F2, float c) {
        float r27784 = b_2F2;
        float r27785 = -r27784;
        float r27786 = r27784 * r27784;
        float r27787 = a;
        float r27788 = c;
        float r27789 = r27787 * r27788;
        float r27790 = r27786 - r27789;
        float r27791 = sqrt(r27790);
        float r27792 = r27785 - r27791;
        float r27793 = r27792 / r27787;
        return r27793;
}

double f_id(double a, double b_2F2, double c) {
        double r27794 = b_2F2;
        double r27795 = -r27794;
        double r27796 = r27794 * r27794;
        double r27797 = a;
        double r27798 = c;
        double r27799 = r27797 * r27798;
        double r27800 = r27796 - r27799;
        double r27801 = sqrt(r27800);
        double r27802 = r27795 - r27801;
        double r27803 = r27802 / r27797;
        return r27803;
}


double f_of(float a, float b_2F2, float c) {
        float r27804 = b_2F2;
        float r27805 = -1.5109696884710251e+32;
        bool r27806 = r27804 <= r27805;
        float r27807 = c;
        float r27808 = r27807 / r27804;
        float r27809 = -1/2;
        float r27810 = r27808 * r27809;
        float r27811 = -5.265216833412822e-50;
        bool r27812 = r27804 <= r27811;
        float r27813 = a;
        float r27814 = r27807 * r27813;
        float r27815 = -r27804;
        float r27816 = r27804 * r27804;
        float r27817 = r27813 * r27807;
        float r27818 = r27816 - r27817;
        float r27819 = sqrt(r27818);
        float r27820 = r27815 + r27819;
        float r27821 = r27814 / r27820;
        float r27822 = r27821 / r27813;
        float r27823 = -5.313823226269673e-107;
        bool r27824 = r27804 <= r27823;
        float r27825 = 1.6622135411792587e+81;
        bool r27826 = r27804 <= r27825;
        float r27827 = r27815 - r27819;
        float r27828 = r27827 / r27813;
        float r27829 = -2;
        float r27830 = r27804 / r27813;
        float r27831 = r27829 * r27830;
        float r27832 = r27826 ? r27828 : r27831;
        float r27833 = r27824 ? r27810 : r27832;
        float r27834 = r27812 ? r27822 : r27833;
        float r27835 = r27806 ? r27810 : r27834;
        return r27835;
}

double f_od(double a, double b_2F2, double c) {
        double r27836 = b_2F2;
        double r27837 = -1.5109696884710251e+32;
        bool r27838 = r27836 <= r27837;
        double r27839 = c;
        double r27840 = r27839 / r27836;
        double r27841 = -1/2;
        double r27842 = r27840 * r27841;
        double r27843 = -5.265216833412822e-50;
        bool r27844 = r27836 <= r27843;
        double r27845 = a;
        double r27846 = r27839 * r27845;
        double r27847 = -r27836;
        double r27848 = r27836 * r27836;
        double r27849 = r27845 * r27839;
        double r27850 = r27848 - r27849;
        double r27851 = sqrt(r27850);
        double r27852 = r27847 + r27851;
        double r27853 = r27846 / r27852;
        double r27854 = r27853 / r27845;
        double r27855 = -5.313823226269673e-107;
        bool r27856 = r27836 <= r27855;
        double r27857 = 1.6622135411792587e+81;
        bool r27858 = r27836 <= r27857;
        double r27859 = r27847 - r27851;
        double r27860 = r27859 / r27845;
        double r27861 = -2;
        double r27862 = r27836 / r27845;
        double r27863 = r27861 * r27862;
        double r27864 = r27858 ? r27860 : r27863;
        double r27865 = r27856 ? r27842 : r27864;
        double r27866 = r27844 ? r27854 : r27865;
        double r27867 = r27838 ? r27842 : r27866;
        return r27867;
}

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 r27868, r27869, r27870, r27871, r27872, r27873, r27874, r27875, r27876, r27877;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(3216);
        mpfr_init(r27868);
        mpfr_init(r27869);
        mpfr_init(r27870);
        mpfr_init(r27871);
        mpfr_init(r27872);
        mpfr_init(r27873);
        mpfr_init(r27874);
        mpfr_init(r27875);
        mpfr_init(r27876);
        mpfr_init(r27877);
}

double f_im(double a, double b_2F2, double c) {
        mpfr_set_d(r27868, b_2F2, MPFR_RNDN);
        mpfr_neg(r27869, r27868, MPFR_RNDN);
        mpfr_mul(r27870, r27868, r27868, MPFR_RNDN);
        mpfr_set_d(r27871, a, MPFR_RNDN);
        mpfr_set_d(r27872, c, MPFR_RNDN);
        mpfr_mul(r27873, r27871, r27872, MPFR_RNDN);
        mpfr_sub(r27874, r27870, r27873, MPFR_RNDN);
        mpfr_sqrt(r27875, r27874, MPFR_RNDN);
        mpfr_sub(r27876, r27869, r27875, MPFR_RNDN);
        mpfr_div(r27877, r27876, r27871, MPFR_RNDN);
        return mpfr_get_d(r27877, MPFR_RNDN);
}

static mpfr_t r27878, r27879, r27880, r27881, r27882, r27883, r27884, r27885, r27886, r27887, r27888, r27889, r27890, r27891, r27892, r27893, r27894, r27895, r27896, r27897, r27898, r27899, r27900, r27901, r27902, r27903, r27904, r27905, r27906, r27907, r27908, r27909;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(3216);
        mpfr_init(r27878);
        mpfr_init_set_str(r27879, "-1.5109696884710251e+32", 10, MPFR_RNDN);
        mpfr_init(r27880);
        mpfr_init(r27881);
        mpfr_init(r27882);
        mpfr_init_set_str(r27883, "-1/2", 10, MPFR_RNDN);
        mpfr_init(r27884);
        mpfr_init_set_str(r27885, "-5.265216833412822e-50", 10, MPFR_RNDN);
        mpfr_init(r27886);
        mpfr_init(r27887);
        mpfr_init(r27888);
        mpfr_init(r27889);
        mpfr_init(r27890);
        mpfr_init(r27891);
        mpfr_init(r27892);
        mpfr_init(r27893);
        mpfr_init(r27894);
        mpfr_init(r27895);
        mpfr_init(r27896);
        mpfr_init_set_str(r27897, "-5.313823226269673e-107", 10, MPFR_RNDN);
        mpfr_init(r27898);
        mpfr_init_set_str(r27899, "1.6622135411792587e+81", 10, MPFR_RNDN);
        mpfr_init(r27900);
        mpfr_init(r27901);
        mpfr_init(r27902);
        mpfr_init_set_str(r27903, "-2", 10, MPFR_RNDN);
        mpfr_init(r27904);
        mpfr_init(r27905);
        mpfr_init(r27906);
        mpfr_init(r27907);
        mpfr_init(r27908);
        mpfr_init(r27909);
}

double f_fm(double a, double b_2F2, double c) {
        mpfr_set_d(r27878, b_2F2, MPFR_RNDN);
        ;
        mpfr_set_si(r27880, mpfr_cmp(r27878, r27879) <= 0, MPFR_RNDN);
        mpfr_set_d(r27881, c, MPFR_RNDN);
        mpfr_div(r27882, r27881, r27878, MPFR_RNDN);
        ;
        mpfr_mul(r27884, r27882, r27883, MPFR_RNDN);
        ;
        mpfr_set_si(r27886, mpfr_cmp(r27878, r27885) <= 0, MPFR_RNDN);
        mpfr_set_d(r27887, a, MPFR_RNDN);
        mpfr_mul(r27888, r27881, r27887, MPFR_RNDN);
        mpfr_neg(r27889, r27878, MPFR_RNDN);
        mpfr_mul(r27890, r27878, r27878, MPFR_RNDN);
        mpfr_mul(r27891, r27887, r27881, MPFR_RNDN);
        mpfr_sub(r27892, r27890, r27891, MPFR_RNDN);
        mpfr_sqrt(r27893, r27892, MPFR_RNDN);
        mpfr_add(r27894, r27889, r27893, MPFR_RNDN);
        mpfr_div(r27895, r27888, r27894, MPFR_RNDN);
        mpfr_div(r27896, r27895, r27887, MPFR_RNDN);
        ;
        mpfr_set_si(r27898, mpfr_cmp(r27878, r27897) <= 0, MPFR_RNDN);
        ;
        mpfr_set_si(r27900, mpfr_cmp(r27878, r27899) <= 0, MPFR_RNDN);
        mpfr_sub(r27901, r27889, r27893, MPFR_RNDN);
        mpfr_div(r27902, r27901, r27887, MPFR_RNDN);
        ;
        mpfr_div(r27904, r27878, r27887, MPFR_RNDN);
        mpfr_mul(r27905, r27903, r27904, MPFR_RNDN);
        if (mpfr_get_si(r27900, MPFR_RNDN)) { mpfr_set(r27906, r27902, MPFR_RNDN); } else { mpfr_set(r27906, r27905, MPFR_RNDN); };
        if (mpfr_get_si(r27898, MPFR_RNDN)) { mpfr_set(r27907, r27884, MPFR_RNDN); } else { mpfr_set(r27907, r27906, MPFR_RNDN); };
        if (mpfr_get_si(r27886, MPFR_RNDN)) { mpfr_set(r27908, r27896, MPFR_RNDN); } else { mpfr_set(r27908, r27907, MPFR_RNDN); };
        if (mpfr_get_si(r27880, MPFR_RNDN)) { mpfr_set(r27909, r27884, MPFR_RNDN); } else { mpfr_set(r27909, r27908, MPFR_RNDN); };
        return mpfr_get_d(r27909, MPFR_RNDN);
}

static mpfr_t r27910, r27911, r27912, r27913, r27914, r27915, r27916, r27917, r27918, r27919, r27920, r27921, r27922, r27923, r27924, r27925, r27926, r27927, r27928, r27929, r27930, r27931, r27932, r27933, r27934, r27935, r27936, r27937, r27938, r27939, r27940, r27941;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(3216);
        mpfr_init(r27910);
        mpfr_init_set_str(r27911, "-1.5109696884710251e+32", 10, MPFR_RNDN);
        mpfr_init(r27912);
        mpfr_init(r27913);
        mpfr_init(r27914);
        mpfr_init_set_str(r27915, "-1/2", 10, MPFR_RNDN);
        mpfr_init(r27916);
        mpfr_init_set_str(r27917, "-5.265216833412822e-50", 10, MPFR_RNDN);
        mpfr_init(r27918);
        mpfr_init(r27919);
        mpfr_init(r27920);
        mpfr_init(r27921);
        mpfr_init(r27922);
        mpfr_init(r27923);
        mpfr_init(r27924);
        mpfr_init(r27925);
        mpfr_init(r27926);
        mpfr_init(r27927);
        mpfr_init(r27928);
        mpfr_init_set_str(r27929, "-5.313823226269673e-107", 10, MPFR_RNDN);
        mpfr_init(r27930);
        mpfr_init_set_str(r27931, "1.6622135411792587e+81", 10, MPFR_RNDN);
        mpfr_init(r27932);
        mpfr_init(r27933);
        mpfr_init(r27934);
        mpfr_init_set_str(r27935, "-2", 10, MPFR_RNDN);
        mpfr_init(r27936);
        mpfr_init(r27937);
        mpfr_init(r27938);
        mpfr_init(r27939);
        mpfr_init(r27940);
        mpfr_init(r27941);
}

double f_dm(double a, double b_2F2, double c) {
        mpfr_set_d(r27910, b_2F2, MPFR_RNDN);
        ;
        mpfr_set_si(r27912, mpfr_cmp(r27910, r27911) <= 0, MPFR_RNDN);
        mpfr_set_d(r27913, c, MPFR_RNDN);
        mpfr_div(r27914, r27913, r27910, MPFR_RNDN);
        ;
        mpfr_mul(r27916, r27914, r27915, MPFR_RNDN);
        ;
        mpfr_set_si(r27918, mpfr_cmp(r27910, r27917) <= 0, MPFR_RNDN);
        mpfr_set_d(r27919, a, MPFR_RNDN);
        mpfr_mul(r27920, r27913, r27919, MPFR_RNDN);
        mpfr_neg(r27921, r27910, MPFR_RNDN);
        mpfr_mul(r27922, r27910, r27910, MPFR_RNDN);
        mpfr_mul(r27923, r27919, r27913, MPFR_RNDN);
        mpfr_sub(r27924, r27922, r27923, MPFR_RNDN);
        mpfr_sqrt(r27925, r27924, MPFR_RNDN);
        mpfr_add(r27926, r27921, r27925, MPFR_RNDN);
        mpfr_div(r27927, r27920, r27926, MPFR_RNDN);
        mpfr_div(r27928, r27927, r27919, MPFR_RNDN);
        ;
        mpfr_set_si(r27930, mpfr_cmp(r27910, r27929) <= 0, MPFR_RNDN);
        ;
        mpfr_set_si(r27932, mpfr_cmp(r27910, r27931) <= 0, MPFR_RNDN);
        mpfr_sub(r27933, r27921, r27925, MPFR_RNDN);
        mpfr_div(r27934, r27933, r27919, MPFR_RNDN);
        ;
        mpfr_div(r27936, r27910, r27919, MPFR_RNDN);
        mpfr_mul(r27937, r27935, r27936, MPFR_RNDN);
        if (mpfr_get_si(r27932, MPFR_RNDN)) { mpfr_set(r27938, r27934, MPFR_RNDN); } else { mpfr_set(r27938, r27937, MPFR_RNDN); };
        if (mpfr_get_si(r27930, MPFR_RNDN)) { mpfr_set(r27939, r27916, MPFR_RNDN); } else { mpfr_set(r27939, r27938, MPFR_RNDN); };
        if (mpfr_get_si(r27918, MPFR_RNDN)) { mpfr_set(r27940, r27928, MPFR_RNDN); } else { mpfr_set(r27940, r27939, MPFR_RNDN); };
        if (mpfr_get_si(r27912, MPFR_RNDN)) { mpfr_set(r27941, r27916, MPFR_RNDN); } else { mpfr_set(r27941, r27940, MPFR_RNDN); };
        return mpfr_get_d(r27941, MPFR_RNDN);
}

