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

char *name = "Falkner and Boettcher, Appendix A";

double f_if(float a, float k, float m) {
        float r27842 = a;
        float r27843 = k;
        float r27844 = m;
        float r27845 = pow(r27843, r27844);
        float r27846 = r27842 * r27845;
        float r27847 = 1;
        float r27848 = 10;
        float r27849 = r27848 * r27843;
        float r27850 = r27847 + r27849;
        float r27851 = r27843 * r27843;
        float r27852 = r27850 + r27851;
        float r27853 = r27846 / r27852;
        return r27853;
}

double f_id(double a, double k, double m) {
        double r27854 = a;
        double r27855 = k;
        double r27856 = m;
        double r27857 = pow(r27855, r27856);
        double r27858 = r27854 * r27857;
        double r27859 = 1;
        double r27860 = 10;
        double r27861 = r27860 * r27855;
        double r27862 = r27859 + r27861;
        double r27863 = r27855 * r27855;
        double r27864 = r27862 + r27863;
        double r27865 = r27858 / r27864;
        return r27865;
}


double f_of(float a, float k, float m) {
        float r27866 = k;
        float r27867 = m;
        float r27868 = pow(r27866, r27867);
        float r27869 = a;
        float r27870 = r27868 * r27869;
        float r27871 = 1;
        float r27872 = 10;
        float r27873 = 3;
        float r27874 = pow(r27872, r27873);
        float r27875 = pow(r27866, r27873);
        float r27876 = r27874 + r27875;
        float r27877 = r27876 * r27866;
        float r27878 = r27872 * r27872;
        float r27879 = r27866 * r27866;
        float r27880 = r27872 * r27866;
        float r27881 = r27879 - r27880;
        float r27882 = r27878 + r27881;
        float r27883 = r27877 / r27882;
        float r27884 = r27871 + r27883;
        float r27885 = r27870 / r27884;
        float r27886 = 3.0347748582371028e+161;
        bool r27887 = r27885 <= r27886;
        float r27888 = r27872 + r27866;
        float r27889 = r27888 * r27866;
        float r27890 = r27871 + r27889;
        float r27891 = r27871 / r27890;
        float r27892 = r27870 * r27891;
        float r27893 = -r27867;
        float r27894 = pow(r27866, r27893);
        float r27895 = r27894 / r27869;
        float r27896 = r27866 / r27869;
        float r27897 = r27896 / r27868;
        float r27898 = r27897 * r27888;
        float r27899 = r27895 + r27898;
        float r27900 = r27871 / r27899;
        float r27901 = r27887 ? r27892 : r27900;
        return r27901;
}

double f_od(double a, double k, double m) {
        double r27902 = k;
        double r27903 = m;
        double r27904 = pow(r27902, r27903);
        double r27905 = a;
        double r27906 = r27904 * r27905;
        double r27907 = 1;
        double r27908 = 10;
        double r27909 = 3;
        double r27910 = pow(r27908, r27909);
        double r27911 = pow(r27902, r27909);
        double r27912 = r27910 + r27911;
        double r27913 = r27912 * r27902;
        double r27914 = r27908 * r27908;
        double r27915 = r27902 * r27902;
        double r27916 = r27908 * r27902;
        double r27917 = r27915 - r27916;
        double r27918 = r27914 + r27917;
        double r27919 = r27913 / r27918;
        double r27920 = r27907 + r27919;
        double r27921 = r27906 / r27920;
        double r27922 = 3.0347748582371028e+161;
        bool r27923 = r27921 <= r27922;
        double r27924 = r27908 + r27902;
        double r27925 = r27924 * r27902;
        double r27926 = r27907 + r27925;
        double r27927 = r27907 / r27926;
        double r27928 = r27906 * r27927;
        double r27929 = -r27903;
        double r27930 = pow(r27902, r27929);
        double r27931 = r27930 / r27905;
        double r27932 = r27902 / r27905;
        double r27933 = r27932 / r27904;
        double r27934 = r27933 * r27924;
        double r27935 = r27931 + r27934;
        double r27936 = r27907 / r27935;
        double r27937 = r27923 ? r27928 : r27936;
        return r27937;
}

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 r27938, r27939, r27940, r27941, r27942, r27943, r27944, r27945, r27946, r27947, r27948, r27949;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(336);
        mpfr_init(r27938);
        mpfr_init(r27939);
        mpfr_init(r27940);
        mpfr_init(r27941);
        mpfr_init(r27942);
        mpfr_init_set_str(r27943, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r27944, "10", 10, MPFR_RNDN);
        mpfr_init(r27945);
        mpfr_init(r27946);
        mpfr_init(r27947);
        mpfr_init(r27948);
        mpfr_init(r27949);
}

double f_im(double a, double k, double m) {
        mpfr_set_d(r27938, a, MPFR_RNDN);
        mpfr_set_d(r27939, k, MPFR_RNDN);
        mpfr_set_d(r27940, m, MPFR_RNDN);
        mpfr_pow(r27941, r27939, r27940, MPFR_RNDN);
        mpfr_mul(r27942, r27938, r27941, MPFR_RNDN);
        ;
        ;
        mpfr_mul(r27945, r27944, r27939, MPFR_RNDN);
        mpfr_add(r27946, r27943, r27945, MPFR_RNDN);
        mpfr_mul(r27947, r27939, r27939, MPFR_RNDN);
        mpfr_add(r27948, r27946, r27947, MPFR_RNDN);
        mpfr_div(r27949, r27942, r27948, MPFR_RNDN);
        return mpfr_get_d(r27949, MPFR_RNDN);
}

static mpfr_t r27950, r27951, r27952, r27953, r27954, r27955, r27956, r27957, r27958, r27959, r27960, r27961, r27962, r27963, r27964, r27965, r27966, r27967, r27968, r27969, r27970, r27971, r27972, r27973, r27974, r27975, r27976, r27977, r27978, r27979, r27980, r27981, r27982, r27983, r27984, r27985;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(336);
        mpfr_init(r27950);
        mpfr_init(r27951);
        mpfr_init(r27952);
        mpfr_init(r27953);
        mpfr_init(r27954);
        mpfr_init_set_str(r27955, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r27956, "10", 10, MPFR_RNDN);
        mpfr_init_set_str(r27957, "3", 10, MPFR_RNDN);
        mpfr_init(r27958);
        mpfr_init(r27959);
        mpfr_init(r27960);
        mpfr_init(r27961);
        mpfr_init(r27962);
        mpfr_init(r27963);
        mpfr_init(r27964);
        mpfr_init(r27965);
        mpfr_init(r27966);
        mpfr_init(r27967);
        mpfr_init(r27968);
        mpfr_init(r27969);
        mpfr_init_set_str(r27970, "3.0347748582371028e+161", 10, MPFR_RNDN);
        mpfr_init(r27971);
        mpfr_init(r27972);
        mpfr_init(r27973);
        mpfr_init(r27974);
        mpfr_init(r27975);
        mpfr_init(r27976);
        mpfr_init(r27977);
        mpfr_init(r27978);
        mpfr_init(r27979);
        mpfr_init(r27980);
        mpfr_init(r27981);
        mpfr_init(r27982);
        mpfr_init(r27983);
        mpfr_init(r27984);
        mpfr_init(r27985);
}

double f_fm(double a, double k, double m) {
        mpfr_set_d(r27950, k, MPFR_RNDN);
        mpfr_set_d(r27951, m, MPFR_RNDN);
        mpfr_pow(r27952, r27950, r27951, MPFR_RNDN);
        mpfr_set_d(r27953, a, MPFR_RNDN);
        mpfr_mul(r27954, r27952, r27953, MPFR_RNDN);
        ;
        ;
        ;
        mpfr_pow(r27958, r27956, r27957, MPFR_RNDN);
        mpfr_pow(r27959, r27950, r27957, MPFR_RNDN);
        mpfr_add(r27960, r27958, r27959, MPFR_RNDN);
        mpfr_mul(r27961, r27960, r27950, MPFR_RNDN);
        mpfr_mul(r27962, r27956, r27956, MPFR_RNDN);
        mpfr_mul(r27963, r27950, r27950, MPFR_RNDN);
        mpfr_mul(r27964, r27956, r27950, MPFR_RNDN);
        mpfr_sub(r27965, r27963, r27964, MPFR_RNDN);
        mpfr_add(r27966, r27962, r27965, MPFR_RNDN);
        mpfr_div(r27967, r27961, r27966, MPFR_RNDN);
        mpfr_add(r27968, r27955, r27967, MPFR_RNDN);
        mpfr_div(r27969, r27954, r27968, MPFR_RNDN);
        ;
        mpfr_set_si(r27971, mpfr_cmp(r27969, r27970) <= 0, MPFR_RNDN);
        mpfr_add(r27972, r27956, r27950, MPFR_RNDN);
        mpfr_mul(r27973, r27972, r27950, MPFR_RNDN);
        mpfr_add(r27974, r27955, r27973, MPFR_RNDN);
        mpfr_div(r27975, r27955, r27974, MPFR_RNDN);
        mpfr_mul(r27976, r27954, r27975, MPFR_RNDN);
        mpfr_neg(r27977, r27951, MPFR_RNDN);
        mpfr_pow(r27978, r27950, r27977, MPFR_RNDN);
        mpfr_div(r27979, r27978, r27953, MPFR_RNDN);
        mpfr_div(r27980, r27950, r27953, MPFR_RNDN);
        mpfr_div(r27981, r27980, r27952, MPFR_RNDN);
        mpfr_mul(r27982, r27981, r27972, MPFR_RNDN);
        mpfr_add(r27983, r27979, r27982, MPFR_RNDN);
        mpfr_div(r27984, r27955, r27983, MPFR_RNDN);
        if (mpfr_get_si(r27971, MPFR_RNDN)) { mpfr_set(r27985, r27976, MPFR_RNDN); } else { mpfr_set(r27985, r27984, MPFR_RNDN); };
        return mpfr_get_d(r27985, MPFR_RNDN);
}

static mpfr_t r27986, r27987, r27988, r27989, r27990, r27991, r27992, r27993, r27994, r27995, r27996, r27997, r27998, r27999, r28000, r28001, r28002, r28003, r28004, r28005, r28006, r28007, r28008, r28009, r28010, r28011, r28012, r28013, r28014, r28015, r28016, r28017, r28018, r28019, r28020, r28021;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(336);
        mpfr_init(r27986);
        mpfr_init(r27987);
        mpfr_init(r27988);
        mpfr_init(r27989);
        mpfr_init(r27990);
        mpfr_init_set_str(r27991, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r27992, "10", 10, MPFR_RNDN);
        mpfr_init_set_str(r27993, "3", 10, MPFR_RNDN);
        mpfr_init(r27994);
        mpfr_init(r27995);
        mpfr_init(r27996);
        mpfr_init(r27997);
        mpfr_init(r27998);
        mpfr_init(r27999);
        mpfr_init(r28000);
        mpfr_init(r28001);
        mpfr_init(r28002);
        mpfr_init(r28003);
        mpfr_init(r28004);
        mpfr_init(r28005);
        mpfr_init_set_str(r28006, "3.0347748582371028e+161", 10, MPFR_RNDN);
        mpfr_init(r28007);
        mpfr_init(r28008);
        mpfr_init(r28009);
        mpfr_init(r28010);
        mpfr_init(r28011);
        mpfr_init(r28012);
        mpfr_init(r28013);
        mpfr_init(r28014);
        mpfr_init(r28015);
        mpfr_init(r28016);
        mpfr_init(r28017);
        mpfr_init(r28018);
        mpfr_init(r28019);
        mpfr_init(r28020);
        mpfr_init(r28021);
}

double f_dm(double a, double k, double m) {
        mpfr_set_d(r27986, k, MPFR_RNDN);
        mpfr_set_d(r27987, m, MPFR_RNDN);
        mpfr_pow(r27988, r27986, r27987, MPFR_RNDN);
        mpfr_set_d(r27989, a, MPFR_RNDN);
        mpfr_mul(r27990, r27988, r27989, MPFR_RNDN);
        ;
        ;
        ;
        mpfr_pow(r27994, r27992, r27993, MPFR_RNDN);
        mpfr_pow(r27995, r27986, r27993, MPFR_RNDN);
        mpfr_add(r27996, r27994, r27995, MPFR_RNDN);
        mpfr_mul(r27997, r27996, r27986, MPFR_RNDN);
        mpfr_mul(r27998, r27992, r27992, MPFR_RNDN);
        mpfr_mul(r27999, r27986, r27986, MPFR_RNDN);
        mpfr_mul(r28000, r27992, r27986, MPFR_RNDN);
        mpfr_sub(r28001, r27999, r28000, MPFR_RNDN);
        mpfr_add(r28002, r27998, r28001, MPFR_RNDN);
        mpfr_div(r28003, r27997, r28002, MPFR_RNDN);
        mpfr_add(r28004, r27991, r28003, MPFR_RNDN);
        mpfr_div(r28005, r27990, r28004, MPFR_RNDN);
        ;
        mpfr_set_si(r28007, mpfr_cmp(r28005, r28006) <= 0, MPFR_RNDN);
        mpfr_add(r28008, r27992, r27986, MPFR_RNDN);
        mpfr_mul(r28009, r28008, r27986, MPFR_RNDN);
        mpfr_add(r28010, r27991, r28009, MPFR_RNDN);
        mpfr_div(r28011, r27991, r28010, MPFR_RNDN);
        mpfr_mul(r28012, r27990, r28011, MPFR_RNDN);
        mpfr_neg(r28013, r27987, MPFR_RNDN);
        mpfr_pow(r28014, r27986, r28013, MPFR_RNDN);
        mpfr_div(r28015, r28014, r27989, MPFR_RNDN);
        mpfr_div(r28016, r27986, r27989, MPFR_RNDN);
        mpfr_div(r28017, r28016, r27988, MPFR_RNDN);
        mpfr_mul(r28018, r28017, r28008, MPFR_RNDN);
        mpfr_add(r28019, r28015, r28018, MPFR_RNDN);
        mpfr_div(r28020, r27991, r28019, MPFR_RNDN);
        if (mpfr_get_si(r28007, MPFR_RNDN)) { mpfr_set(r28021, r28012, MPFR_RNDN); } else { mpfr_set(r28021, r28020, MPFR_RNDN); };
        return mpfr_get_d(r28021, MPFR_RNDN);
}

