#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 r16738 = b_2F2;
        float r16739 = -r16738;
        float r16740 = r16738 * r16738;
        float r16741 = a;
        float r16742 = c;
        float r16743 = r16741 * r16742;
        float r16744 = r16740 - r16743;
        float r16745 = sqrt(r16744);
        float r16746 = r16739 - r16745;
        float r16747 = r16746 / r16741;
        return r16747;
}

double f_id(double a, double b_2F2, double c) {
        double r16748 = b_2F2;
        double r16749 = -r16748;
        double r16750 = r16748 * r16748;
        double r16751 = a;
        double r16752 = c;
        double r16753 = r16751 * r16752;
        double r16754 = r16750 - r16753;
        double r16755 = sqrt(r16754);
        double r16756 = r16749 - r16755;
        double r16757 = r16756 / r16751;
        return r16757;
}


double f_of(float a, float b_2F2, float c) {
        float r16758 = b_2F2;
        float r16759 = -2.004330212912464e-07f;
        bool r16760 = r16758 <= r16759;
        float r16761 = c;
        float r16762 = a;
        float r16763 = 0.5f;
        float r16764 = r16762 * r16763;
        float r16765 = r16761 / r16758;
        float r16766 = r16764 * r16765;
        float r16767 = -r16758;
        float r16768 = r16758 - r16767;
        float r16769 = r16766 - r16768;
        float r16770 = r16761 / r16769;
        float r16771 = 100403176.0f;
        bool r16772 = r16758 <= r16771;
        float r16773 = r16758 * r16758;
        float r16774 = r16762 * r16761;
        float r16775 = r16773 - r16774;
        float r16776 = sqrt(r16775);
        float r16777 = r16767 - r16776;
        float r16778 = 1.0f;
        float r16779 = r16778 / r16762;
        float r16780 = r16777 * r16779;
        float r16781 = r16758 / r16761;
        float r16782 = r16763 / r16781;
        float r16783 = r16758 / r16762;
        float r16784 = 2.0f;
        float r16785 = r16783 * r16784;
        float r16786 = r16782 - r16785;
        float r16787 = r16772 ? r16780 : r16786;
        float r16788 = r16760 ? r16770 : r16787;
        return r16788;
}

double f_od(double a, double b_2F2, double c) {
        double r16789 = b_2F2;
        double r16790 = -2.004330212912464e-07;
        bool r16791 = r16789 <= r16790;
        double r16792 = c;
        double r16793 = a;
        double r16794 = 0.5;
        double r16795 = r16793 * r16794;
        double r16796 = r16792 / r16789;
        double r16797 = r16795 * r16796;
        double r16798 = -r16789;
        double r16799 = r16789 - r16798;
        double r16800 = r16797 - r16799;
        double r16801 = r16792 / r16800;
        double r16802 = 100403176.0;
        bool r16803 = r16789 <= r16802;
        double r16804 = r16789 * r16789;
        double r16805 = r16793 * r16792;
        double r16806 = r16804 - r16805;
        double r16807 = sqrt(r16806);
        double r16808 = r16798 - r16807;
        double r16809 = 1.0;
        double r16810 = r16809 / r16793;
        double r16811 = r16808 * r16810;
        double r16812 = r16789 / r16792;
        double r16813 = r16794 / r16812;
        double r16814 = r16789 / r16793;
        double r16815 = 2.0;
        double r16816 = r16814 * r16815;
        double r16817 = r16813 - r16816;
        double r16818 = r16803 ? r16811 : r16817;
        double r16819 = r16791 ? r16801 : r16818;
        return r16819;
}

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 r16820, r16821, r16822, r16823, r16824, r16825, r16826, r16827, r16828, r16829;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r16820);
        mpfr_init(r16821);
        mpfr_init(r16822);
        mpfr_init(r16823);
        mpfr_init(r16824);
        mpfr_init(r16825);
        mpfr_init(r16826);
        mpfr_init(r16827);
        mpfr_init(r16828);
        mpfr_init(r16829);
}

double f_im(double a, double b_2F2, double c) {
        mpfr_set_d(r16820, b_2F2, MPFR_RNDN);
        mpfr_neg(r16821, r16820, MPFR_RNDN);
        mpfr_sqr(r16822, r16820, MPFR_RNDN);
        mpfr_set_d(r16823, a, MPFR_RNDN);
        mpfr_set_d(r16824, c, MPFR_RNDN);
        mpfr_mul(r16825, r16823, r16824, MPFR_RNDN);
        mpfr_sub(r16826, r16822, r16825, MPFR_RNDN);
        mpfr_sqrt(r16827, r16826, MPFR_RNDN);
        mpfr_sub(r16828, r16821, r16827, MPFR_RNDN);
        mpfr_div(r16829, r16828, r16823, MPFR_RNDN);
        return mpfr_get_d(r16829, MPFR_RNDN);
}

static mpfr_t r16830, r16831, r16832, r16833, r16834, r16835, r16836, r16837, r16838, r16839, r16840, r16841, r16842, r16843, r16844, r16845, r16846, r16847, r16848, r16849, r16850, r16851, r16852, r16853, r16854, r16855, r16856, r16857, r16858, r16859, r16860;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r16830);
        mpfr_init_set_str(r16831, "-2.0043302f-07", 10, MPFR_RNDN);
        mpfr_init(r16832);
        mpfr_init(r16833);
        mpfr_init(r16834);
        mpfr_init_set_str(r16835, "1/2", 10, MPFR_RNDN);
        mpfr_init(r16836);
        mpfr_init(r16837);
        mpfr_init(r16838);
        mpfr_init(r16839);
        mpfr_init(r16840);
        mpfr_init(r16841);
        mpfr_init(r16842);
        mpfr_init_set_str(r16843, "100403176.0f0", 10, MPFR_RNDN);
        mpfr_init(r16844);
        mpfr_init(r16845);
        mpfr_init(r16846);
        mpfr_init(r16847);
        mpfr_init(r16848);
        mpfr_init(r16849);
        mpfr_init_set_str(r16850, "1", 10, MPFR_RNDN);
        mpfr_init(r16851);
        mpfr_init(r16852);
        mpfr_init(r16853);
        mpfr_init(r16854);
        mpfr_init(r16855);
        mpfr_init_set_str(r16856, "2", 10, MPFR_RNDN);
        mpfr_init(r16857);
        mpfr_init(r16858);
        mpfr_init(r16859);
        mpfr_init(r16860);
}

double f_fm(double a, double b_2F2, double c) {
        mpfr_set_d(r16830, b_2F2, MPFR_RNDN);
        ;
        mpfr_set_si(r16832, mpfr_cmp(r16830, r16831) <= 0, MPFR_RNDN);
        mpfr_set_d(r16833, c, MPFR_RNDN);
        mpfr_set_d(r16834, a, MPFR_RNDN);
        ;
        mpfr_mul(r16836, r16834, r16835, MPFR_RNDN);
        mpfr_div(r16837, r16833, r16830, MPFR_RNDN);
        mpfr_mul(r16838, r16836, r16837, MPFR_RNDN);
        mpfr_neg(r16839, r16830, MPFR_RNDN);
        mpfr_sub(r16840, r16830, r16839, MPFR_RNDN);
        mpfr_sub(r16841, r16838, r16840, MPFR_RNDN);
        mpfr_div(r16842, r16833, r16841, MPFR_RNDN);
        ;
        mpfr_set_si(r16844, mpfr_cmp(r16830, r16843) <= 0, MPFR_RNDN);
        mpfr_sqr(r16845, r16830, MPFR_RNDN);
        mpfr_mul(r16846, r16834, r16833, MPFR_RNDN);
        mpfr_sub(r16847, r16845, r16846, MPFR_RNDN);
        mpfr_sqrt(r16848, r16847, MPFR_RNDN);
        mpfr_sub(r16849, r16839, r16848, MPFR_RNDN);
        ;
        mpfr_div(r16851, r16850, r16834, MPFR_RNDN);
        mpfr_mul(r16852, r16849, r16851, MPFR_RNDN);
        mpfr_div(r16853, r16830, r16833, MPFR_RNDN);
        mpfr_div(r16854, r16835, r16853, MPFR_RNDN);
        mpfr_div(r16855, r16830, r16834, MPFR_RNDN);
        ;
        mpfr_mul(r16857, r16855, r16856, MPFR_RNDN);
        mpfr_sub(r16858, r16854, r16857, MPFR_RNDN);
        if (mpfr_get_si(r16844, MPFR_RNDN)) { mpfr_set(r16859, r16852, MPFR_RNDN); } else { mpfr_set(r16859, r16858, MPFR_RNDN); };
        if (mpfr_get_si(r16832, MPFR_RNDN)) { mpfr_set(r16860, r16842, MPFR_RNDN); } else { mpfr_set(r16860, r16859, MPFR_RNDN); };
        return mpfr_get_d(r16860, MPFR_RNDN);
}

static mpfr_t r16861, r16862, r16863, r16864, r16865, r16866, r16867, r16868, r16869, r16870, r16871, r16872, r16873, r16874, r16875, r16876, r16877, r16878, r16879, r16880, r16881, r16882, r16883, r16884, r16885, r16886, r16887, r16888, r16889, r16890, r16891;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r16861);
        mpfr_init_set_str(r16862, "-2.0043302f-07", 10, MPFR_RNDN);
        mpfr_init(r16863);
        mpfr_init(r16864);
        mpfr_init(r16865);
        mpfr_init_set_str(r16866, "1/2", 10, MPFR_RNDN);
        mpfr_init(r16867);
        mpfr_init(r16868);
        mpfr_init(r16869);
        mpfr_init(r16870);
        mpfr_init(r16871);
        mpfr_init(r16872);
        mpfr_init(r16873);
        mpfr_init_set_str(r16874, "100403176.0f0", 10, MPFR_RNDN);
        mpfr_init(r16875);
        mpfr_init(r16876);
        mpfr_init(r16877);
        mpfr_init(r16878);
        mpfr_init(r16879);
        mpfr_init(r16880);
        mpfr_init_set_str(r16881, "1", 10, MPFR_RNDN);
        mpfr_init(r16882);
        mpfr_init(r16883);
        mpfr_init(r16884);
        mpfr_init(r16885);
        mpfr_init(r16886);
        mpfr_init_set_str(r16887, "2", 10, MPFR_RNDN);
        mpfr_init(r16888);
        mpfr_init(r16889);
        mpfr_init(r16890);
        mpfr_init(r16891);
}

double f_dm(double a, double b_2F2, double c) {
        mpfr_set_d(r16861, b_2F2, MPFR_RNDN);
        ;
        mpfr_set_si(r16863, mpfr_cmp(r16861, r16862) <= 0, MPFR_RNDN);
        mpfr_set_d(r16864, c, MPFR_RNDN);
        mpfr_set_d(r16865, a, MPFR_RNDN);
        ;
        mpfr_mul(r16867, r16865, r16866, MPFR_RNDN);
        mpfr_div(r16868, r16864, r16861, MPFR_RNDN);
        mpfr_mul(r16869, r16867, r16868, MPFR_RNDN);
        mpfr_neg(r16870, r16861, MPFR_RNDN);
        mpfr_sub(r16871, r16861, r16870, MPFR_RNDN);
        mpfr_sub(r16872, r16869, r16871, MPFR_RNDN);
        mpfr_div(r16873, r16864, r16872, MPFR_RNDN);
        ;
        mpfr_set_si(r16875, mpfr_cmp(r16861, r16874) <= 0, MPFR_RNDN);
        mpfr_sqr(r16876, r16861, MPFR_RNDN);
        mpfr_mul(r16877, r16865, r16864, MPFR_RNDN);
        mpfr_sub(r16878, r16876, r16877, MPFR_RNDN);
        mpfr_sqrt(r16879, r16878, MPFR_RNDN);
        mpfr_sub(r16880, r16870, r16879, MPFR_RNDN);
        ;
        mpfr_div(r16882, r16881, r16865, MPFR_RNDN);
        mpfr_mul(r16883, r16880, r16882, MPFR_RNDN);
        mpfr_div(r16884, r16861, r16864, MPFR_RNDN);
        mpfr_div(r16885, r16866, r16884, MPFR_RNDN);
        mpfr_div(r16886, r16861, r16865, MPFR_RNDN);
        ;
        mpfr_mul(r16888, r16886, r16887, MPFR_RNDN);
        mpfr_sub(r16889, r16885, r16888, MPFR_RNDN);
        if (mpfr_get_si(r16875, MPFR_RNDN)) { mpfr_set(r16890, r16883, MPFR_RNDN); } else { mpfr_set(r16890, r16889, MPFR_RNDN); };
        if (mpfr_get_si(r16863, MPFR_RNDN)) { mpfr_set(r16891, r16873, MPFR_RNDN); } else { mpfr_set(r16891, r16890, MPFR_RNDN); };
        return mpfr_get_d(r16891, MPFR_RNDN);
}

