#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 r10848 = a;
        float r10849 = k;
        float r10850 = m;
        float r10851 = pow(r10849, r10850);
        float r10852 = r10848 * r10851;
        float r10853 = 1.0f;
        float r10854 = 10.0f;
        float r10855 = r10854 * r10849;
        float r10856 = r10853 + r10855;
        float r10857 = r10849 * r10849;
        float r10858 = r10856 + r10857;
        float r10859 = r10852 / r10858;
        return r10859;
}

double f_id(double a, double k, double m) {
        double r10860 = a;
        double r10861 = k;
        double r10862 = m;
        double r10863 = pow(r10861, r10862);
        double r10864 = r10860 * r10863;
        double r10865 = 1.0;
        double r10866 = 10.0;
        double r10867 = r10866 * r10861;
        double r10868 = r10865 + r10867;
        double r10869 = r10861 * r10861;
        double r10870 = r10868 + r10869;
        double r10871 = r10864 / r10870;
        return r10871;
}


double f_of(float a, float k, float m) {
        float r10872 = k;
        float r10873 = 2.439311431159999e+130f;
        bool r10874 = r10872 <= r10873;
        float r10875 = a;
        float r10876 = m;
        float r10877 = pow(r10872, r10876);
        float r10878 = r10875 * r10877;
        float r10879 = r10872 * r10872;
        float r10880 = 10.0f;
        float r10881 = r10872 * r10880;
        float r10882 = 1.0f;
        float r10883 = r10881 + r10882;
        float r10884 = r10879 + r10883;
        float r10885 = r10878 / r10884;
        float r10886 = exp(r10876);
        float r10887 = log(r10872);
        float r10888 = pow(r10886, r10887);
        float r10889 = 4.0f;
        float r10890 = pow(r10872, r10889);
        float r10891 = r10875 / r10890;
        float r10892 = r10888 * r10891;
        float r10893 = 99.0f;
        float r10894 = r10875 / r10872;
        float r10895 = r10880 / r10872;
        float r10896 = r10895 * r10894;
        float r10897 = r10894 - r10896;
        float r10898 = r10888 / r10872;
        float r10899 = r10897 * r10898;
        float r10900 = fma(r10892, r10893, r10899);
        float r10901 = r10874 ? r10885 : r10900;
        return r10901;
}

double f_od(double a, double k, double m) {
        double r10902 = k;
        double r10903 = 2.439311431159999e+130;
        bool r10904 = r10902 <= r10903;
        double r10905 = a;
        double r10906 = m;
        double r10907 = pow(r10902, r10906);
        double r10908 = r10905 * r10907;
        double r10909 = r10902 * r10902;
        double r10910 = 10.0;
        double r10911 = r10902 * r10910;
        double r10912 = 1.0;
        double r10913 = r10911 + r10912;
        double r10914 = r10909 + r10913;
        double r10915 = r10908 / r10914;
        double r10916 = exp(r10906);
        double r10917 = log(r10902);
        double r10918 = pow(r10916, r10917);
        double r10919 = 4.0;
        double r10920 = pow(r10902, r10919);
        double r10921 = r10905 / r10920;
        double r10922 = r10918 * r10921;
        double r10923 = 99.0;
        double r10924 = r10905 / r10902;
        double r10925 = r10910 / r10902;
        double r10926 = r10925 * r10924;
        double r10927 = r10924 - r10926;
        double r10928 = r10918 / r10902;
        double r10929 = r10927 * r10928;
        double r10930 = fma(r10922, r10923, r10929);
        double r10931 = r10904 ? r10915 : r10930;
        return r10931;
}

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 r10932, r10933, r10934, r10935, r10936, r10937, r10938, r10939, r10940, r10941, r10942, r10943;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(336);
        mpfr_init(r10932);
        mpfr_init(r10933);
        mpfr_init(r10934);
        mpfr_init(r10935);
        mpfr_init(r10936);
        mpfr_init_set_str(r10937, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r10938, "10", 10, MPFR_RNDN);
        mpfr_init(r10939);
        mpfr_init(r10940);
        mpfr_init(r10941);
        mpfr_init(r10942);
        mpfr_init(r10943);
}

double f_im(double a, double k, double m) {
        mpfr_set_d(r10932, a, MPFR_RNDN);
        mpfr_set_d(r10933, k, MPFR_RNDN);
        mpfr_set_d(r10934, m, MPFR_RNDN);
        mpfr_pow(r10935, r10933, r10934, MPFR_RNDN);
        mpfr_mul(r10936, r10932, r10935, MPFR_RNDN);
        ;
        ;
        mpfr_mul(r10939, r10938, r10933, MPFR_RNDN);
        mpfr_add(r10940, r10937, r10939, MPFR_RNDN);
        mpfr_mul(r10941, r10933, r10933, MPFR_RNDN);
        mpfr_add(r10942, r10940, r10941, MPFR_RNDN);
        mpfr_div(r10943, r10936, r10942, MPFR_RNDN);
        return mpfr_get_d(r10943, MPFR_RNDN);
}

static mpfr_t r10944, r10945, r10946, r10947, r10948, r10949, r10950, r10951, r10952, r10953, r10954, r10955, r10956, r10957, r10958, r10959, r10960, r10961, r10962, r10963, r10964, r10965, r10966, r10967, r10968, r10969, r10970, r10971, r10972, r10973;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(336);
        mpfr_init(r10944);
        mpfr_init_set_str(r10945, "2.439311431159999e+130", 10, MPFR_RNDN);
        mpfr_init(r10946);
        mpfr_init(r10947);
        mpfr_init(r10948);
        mpfr_init(r10949);
        mpfr_init(r10950);
        mpfr_init(r10951);
        mpfr_init_set_str(r10952, "10", 10, MPFR_RNDN);
        mpfr_init(r10953);
        mpfr_init_set_str(r10954, "1", 10, MPFR_RNDN);
        mpfr_init(r10955);
        mpfr_init(r10956);
        mpfr_init(r10957);
        mpfr_init(r10958);
        mpfr_init(r10959);
        mpfr_init(r10960);
        mpfr_init_set_str(r10961, "4", 10, MPFR_RNDN);
        mpfr_init(r10962);
        mpfr_init(r10963);
        mpfr_init(r10964);
        mpfr_init_set_str(r10965, "99", 10, MPFR_RNDN);
        mpfr_init(r10966);
        mpfr_init(r10967);
        mpfr_init(r10968);
        mpfr_init(r10969);
        mpfr_init(r10970);
        mpfr_init(r10971);
        mpfr_init(r10972);
        mpfr_init(r10973);
}

double f_fm(double a, double k, double m) {
        mpfr_set_d(r10944, k, MPFR_RNDN);
        ;
        mpfr_set_si(r10946, mpfr_cmp(r10944, r10945) <= 0, MPFR_RNDN);
        mpfr_set_d(r10947, a, MPFR_RNDN);
        mpfr_set_d(r10948, m, MPFR_RNDN);
        mpfr_pow(r10949, r10944, r10948, MPFR_RNDN);
        mpfr_mul(r10950, r10947, r10949, MPFR_RNDN);
        mpfr_mul(r10951, r10944, r10944, MPFR_RNDN);
        ;
        mpfr_mul(r10953, r10944, r10952, MPFR_RNDN);
        ;
        mpfr_add(r10955, r10953, r10954, MPFR_RNDN);
        mpfr_add(r10956, r10951, r10955, MPFR_RNDN);
        mpfr_div(r10957, r10950, r10956, MPFR_RNDN);
        mpfr_exp(r10958, r10948, MPFR_RNDN);
        mpfr_log(r10959, r10944, MPFR_RNDN);
        mpfr_pow(r10960, r10958, r10959, MPFR_RNDN);
        ;
        mpfr_pow(r10962, r10944, r10961, MPFR_RNDN);
        mpfr_div(r10963, r10947, r10962, MPFR_RNDN);
        mpfr_mul(r10964, r10960, r10963, MPFR_RNDN);
        ;
        mpfr_div(r10966, r10947, r10944, MPFR_RNDN);
        mpfr_div(r10967, r10952, r10944, MPFR_RNDN);
        mpfr_mul(r10968, r10967, r10966, MPFR_RNDN);
        mpfr_sub(r10969, r10966, r10968, MPFR_RNDN);
        mpfr_div(r10970, r10960, r10944, MPFR_RNDN);
        mpfr_mul(r10971, r10969, r10970, MPFR_RNDN);
        mpfr_fma(r10972, r10964, r10965, r10971, MPFR_RNDN);
        if (mpfr_get_si(r10946, MPFR_RNDN)) { mpfr_set(r10973, r10957, MPFR_RNDN); } else { mpfr_set(r10973, r10972, MPFR_RNDN); };
        return mpfr_get_d(r10973, MPFR_RNDN);
}

static mpfr_t r10974, r10975, r10976, r10977, r10978, r10979, r10980, r10981, r10982, r10983, r10984, r10985, r10986, r10987, r10988, r10989, r10990, r10991, r10992, r10993, r10994, r10995, r10996, r10997, r10998, r10999, r11000, r11001, r11002, r11003;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(336);
        mpfr_init(r10974);
        mpfr_init_set_str(r10975, "2.439311431159999e+130", 10, MPFR_RNDN);
        mpfr_init(r10976);
        mpfr_init(r10977);
        mpfr_init(r10978);
        mpfr_init(r10979);
        mpfr_init(r10980);
        mpfr_init(r10981);
        mpfr_init_set_str(r10982, "10", 10, MPFR_RNDN);
        mpfr_init(r10983);
        mpfr_init_set_str(r10984, "1", 10, MPFR_RNDN);
        mpfr_init(r10985);
        mpfr_init(r10986);
        mpfr_init(r10987);
        mpfr_init(r10988);
        mpfr_init(r10989);
        mpfr_init(r10990);
        mpfr_init_set_str(r10991, "4", 10, MPFR_RNDN);
        mpfr_init(r10992);
        mpfr_init(r10993);
        mpfr_init(r10994);
        mpfr_init_set_str(r10995, "99", 10, MPFR_RNDN);
        mpfr_init(r10996);
        mpfr_init(r10997);
        mpfr_init(r10998);
        mpfr_init(r10999);
        mpfr_init(r11000);
        mpfr_init(r11001);
        mpfr_init(r11002);
        mpfr_init(r11003);
}

double f_dm(double a, double k, double m) {
        mpfr_set_d(r10974, k, MPFR_RNDN);
        ;
        mpfr_set_si(r10976, mpfr_cmp(r10974, r10975) <= 0, MPFR_RNDN);
        mpfr_set_d(r10977, a, MPFR_RNDN);
        mpfr_set_d(r10978, m, MPFR_RNDN);
        mpfr_pow(r10979, r10974, r10978, MPFR_RNDN);
        mpfr_mul(r10980, r10977, r10979, MPFR_RNDN);
        mpfr_mul(r10981, r10974, r10974, MPFR_RNDN);
        ;
        mpfr_mul(r10983, r10974, r10982, MPFR_RNDN);
        ;
        mpfr_add(r10985, r10983, r10984, MPFR_RNDN);
        mpfr_add(r10986, r10981, r10985, MPFR_RNDN);
        mpfr_div(r10987, r10980, r10986, MPFR_RNDN);
        mpfr_exp(r10988, r10978, MPFR_RNDN);
        mpfr_log(r10989, r10974, MPFR_RNDN);
        mpfr_pow(r10990, r10988, r10989, MPFR_RNDN);
        ;
        mpfr_pow(r10992, r10974, r10991, MPFR_RNDN);
        mpfr_div(r10993, r10977, r10992, MPFR_RNDN);
        mpfr_mul(r10994, r10990, r10993, MPFR_RNDN);
        ;
        mpfr_div(r10996, r10977, r10974, MPFR_RNDN);
        mpfr_div(r10997, r10982, r10974, MPFR_RNDN);
        mpfr_mul(r10998, r10997, r10996, MPFR_RNDN);
        mpfr_sub(r10999, r10996, r10998, MPFR_RNDN);
        mpfr_div(r11000, r10990, r10974, MPFR_RNDN);
        mpfr_mul(r11001, r10999, r11000, MPFR_RNDN);
        mpfr_fma(r11002, r10994, r10995, r11001, MPFR_RNDN);
        if (mpfr_get_si(r10976, MPFR_RNDN)) { mpfr_set(r11003, r10987, MPFR_RNDN); } else { mpfr_set(r11003, r11002, MPFR_RNDN); };
        return mpfr_get_d(r11003, MPFR_RNDN);
}

