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

char *name = "Falkner and Boettcher, Equation (20:1,3)";

double f_if(float v, float t) {
        float r30925 = 1.0f;
        float r30926 = 5.0f;
        float r30927 = v;
        float r30928 = r30927 * r30927;
        float r30929 = r30926 * r30928;
        float r30930 = r30925 - r30929;
        float r30931 = atan2(1.0, 0.0);
        float r30932 = t;
        float r30933 = r30931 * r30932;
        float r30934 = 2.0f;
        float r30935 = 3.0f;
        float r30936 = r30935 * r30928;
        float r30937 = r30925 - r30936;
        float r30938 = r30934 * r30937;
        float r30939 = sqrt(r30938);
        float r30940 = r30933 * r30939;
        float r30941 = r30925 - r30928;
        float r30942 = r30940 * r30941;
        float r30943 = r30930 / r30942;
        return r30943;
}

double f_id(double v, double t) {
        double r30944 = 1.0;
        double r30945 = 5.0;
        double r30946 = v;
        double r30947 = r30946 * r30946;
        double r30948 = r30945 * r30947;
        double r30949 = r30944 - r30948;
        double r30950 = atan2(1.0, 0.0);
        double r30951 = t;
        double r30952 = r30950 * r30951;
        double r30953 = 2.0;
        double r30954 = 3.0;
        double r30955 = r30954 * r30947;
        double r30956 = r30944 - r30955;
        double r30957 = r30953 * r30956;
        double r30958 = sqrt(r30957);
        double r30959 = r30952 * r30958;
        double r30960 = r30944 - r30947;
        double r30961 = r30959 * r30960;
        double r30962 = r30949 / r30961;
        return r30962;
}


double f_of(float v, float t) {
        float r30963 = 1.0f;
        float r30964 = 5.0f;
        float r30965 = v;
        float r30966 = r30965 * r30965;
        float r30967 = r30964 * r30966;
        float r30968 = r30963 - r30967;
        float r30969 = atan2(1.0, 0.0);
        float r30970 = t;
        float r30971 = r30969 * r30970;
        float r30972 = 2.0f;
        float r30973 = 3.0f;
        float r30974 = r30973 * r30966;
        float r30975 = r30963 - r30974;
        float r30976 = r30972 * r30975;
        float r30977 = sqrt(r30976);
        float r30978 = r30971 * r30977;
        float r30979 = r30963 - r30966;
        float r30980 = r30978 * r30979;
        float r30981 = r30968 / r30980;
        return r30981;
}

double f_od(double v, double t) {
        double r30982 = 1.0;
        double r30983 = 5.0;
        double r30984 = v;
        double r30985 = r30984 * r30984;
        double r30986 = r30983 * r30985;
        double r30987 = r30982 - r30986;
        double r30988 = atan2(1.0, 0.0);
        double r30989 = t;
        double r30990 = r30988 * r30989;
        double r30991 = 2.0;
        double r30992 = 3.0;
        double r30993 = r30992 * r30985;
        double r30994 = r30982 - r30993;
        double r30995 = r30991 * r30994;
        double r30996 = sqrt(r30995);
        double r30997 = r30990 * r30996;
        double r30998 = r30982 - r30985;
        double r30999 = r30997 * r30998;
        double r31000 = r30987 / r30999;
        return r31000;
}

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 r31001, r31002, r31003, r31004, r31005, r31006, r31007, r31008, r31009, r31010, r31011, r31012, r31013, r31014, r31015, r31016, r31017, r31018, r31019;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r31001, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r31002, "5", 10, MPFR_RNDN);
        mpfr_init(r31003);
        mpfr_init(r31004);
        mpfr_init(r31005);
        mpfr_init(r31006);
        mpfr_init(r31007);
        mpfr_init(r31008);
        mpfr_init(r31009);
        mpfr_init_set_str(r31010, "2", 10, MPFR_RNDN);
        mpfr_init_set_str(r31011, "3", 10, MPFR_RNDN);
        mpfr_init(r31012);
        mpfr_init(r31013);
        mpfr_init(r31014);
        mpfr_init(r31015);
        mpfr_init(r31016);
        mpfr_init(r31017);
        mpfr_init(r31018);
        mpfr_init(r31019);
}

double f_im(double v, double t) {
        ;
        ;
        mpfr_set_d(r31003, v, MPFR_RNDN);
        mpfr_sqr(r31004, r31003, MPFR_RNDN);
        mpfr_mul(r31005, r31002, r31004, MPFR_RNDN);
        mpfr_sub(r31006, r31001, r31005, MPFR_RNDN);
        mpfr_const_pi(r31007, MPFR_RNDN);
        mpfr_set_d(r31008, t, MPFR_RNDN);
        mpfr_mul(r31009, r31007, r31008, MPFR_RNDN);
        ;
        ;
        mpfr_mul(r31012, r31011, r31004, MPFR_RNDN);
        mpfr_sub(r31013, r31001, r31012, MPFR_RNDN);
        mpfr_mul(r31014, r31010, r31013, MPFR_RNDN);
        mpfr_sqrt(r31015, r31014, MPFR_RNDN);
        mpfr_mul(r31016, r31009, r31015, MPFR_RNDN);
        mpfr_sub(r31017, r31001, r31004, MPFR_RNDN);
        mpfr_mul(r31018, r31016, r31017, MPFR_RNDN);
        mpfr_div(r31019, r31006, r31018, MPFR_RNDN);
        return mpfr_get_d(r31019, MPFR_RNDN);
}

static mpfr_t r31020, r31021, r31022, r31023, r31024, r31025, r31026, r31027, r31028, r31029, r31030, r31031, r31032, r31033, r31034, r31035, r31036, r31037, r31038;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r31020, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r31021, "5", 10, MPFR_RNDN);
        mpfr_init(r31022);
        mpfr_init(r31023);
        mpfr_init(r31024);
        mpfr_init(r31025);
        mpfr_init(r31026);
        mpfr_init(r31027);
        mpfr_init(r31028);
        mpfr_init_set_str(r31029, "2", 10, MPFR_RNDN);
        mpfr_init_set_str(r31030, "3", 10, MPFR_RNDN);
        mpfr_init(r31031);
        mpfr_init(r31032);
        mpfr_init(r31033);
        mpfr_init(r31034);
        mpfr_init(r31035);
        mpfr_init(r31036);
        mpfr_init(r31037);
        mpfr_init(r31038);
}

double f_fm(double v, double t) {
        ;
        ;
        mpfr_set_d(r31022, v, MPFR_RNDN);
        mpfr_sqr(r31023, r31022, MPFR_RNDN);
        mpfr_mul(r31024, r31021, r31023, MPFR_RNDN);
        mpfr_sub(r31025, r31020, r31024, MPFR_RNDN);
        mpfr_const_pi(r31026, MPFR_RNDN);
        mpfr_set_d(r31027, t, MPFR_RNDN);
        mpfr_mul(r31028, r31026, r31027, MPFR_RNDN);
        ;
        ;
        mpfr_mul(r31031, r31030, r31023, MPFR_RNDN);
        mpfr_sub(r31032, r31020, r31031, MPFR_RNDN);
        mpfr_mul(r31033, r31029, r31032, MPFR_RNDN);
        mpfr_sqrt(r31034, r31033, MPFR_RNDN);
        mpfr_mul(r31035, r31028, r31034, MPFR_RNDN);
        mpfr_sub(r31036, r31020, r31023, MPFR_RNDN);
        mpfr_mul(r31037, r31035, r31036, MPFR_RNDN);
        mpfr_div(r31038, r31025, r31037, MPFR_RNDN);
        return mpfr_get_d(r31038, MPFR_RNDN);
}

static mpfr_t r31039, r31040, r31041, r31042, r31043, r31044, r31045, r31046, r31047, r31048, r31049, r31050, r31051, r31052, r31053, r31054, r31055, r31056, r31057;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r31039, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r31040, "5", 10, MPFR_RNDN);
        mpfr_init(r31041);
        mpfr_init(r31042);
        mpfr_init(r31043);
        mpfr_init(r31044);
        mpfr_init(r31045);
        mpfr_init(r31046);
        mpfr_init(r31047);
        mpfr_init_set_str(r31048, "2", 10, MPFR_RNDN);
        mpfr_init_set_str(r31049, "3", 10, MPFR_RNDN);
        mpfr_init(r31050);
        mpfr_init(r31051);
        mpfr_init(r31052);
        mpfr_init(r31053);
        mpfr_init(r31054);
        mpfr_init(r31055);
        mpfr_init(r31056);
        mpfr_init(r31057);
}

double f_dm(double v, double t) {
        ;
        ;
        mpfr_set_d(r31041, v, MPFR_RNDN);
        mpfr_sqr(r31042, r31041, MPFR_RNDN);
        mpfr_mul(r31043, r31040, r31042, MPFR_RNDN);
        mpfr_sub(r31044, r31039, r31043, MPFR_RNDN);
        mpfr_const_pi(r31045, MPFR_RNDN);
        mpfr_set_d(r31046, t, MPFR_RNDN);
        mpfr_mul(r31047, r31045, r31046, MPFR_RNDN);
        ;
        ;
        mpfr_mul(r31050, r31049, r31042, MPFR_RNDN);
        mpfr_sub(r31051, r31039, r31050, MPFR_RNDN);
        mpfr_mul(r31052, r31048, r31051, MPFR_RNDN);
        mpfr_sqrt(r31053, r31052, MPFR_RNDN);
        mpfr_mul(r31054, r31047, r31053, MPFR_RNDN);
        mpfr_sub(r31055, r31039, r31042, MPFR_RNDN);
        mpfr_mul(r31056, r31054, r31055, MPFR_RNDN);
        mpfr_div(r31057, r31044, r31056, MPFR_RNDN);
        return mpfr_get_d(r31057, MPFR_RNDN);
}

