#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 r32740 = 1;
        float r32741 = 5;
        float r32742 = v;
        float r32743 = r32742 * r32742;
        float r32744 = r32741 * r32743;
        float r32745 = r32740 - r32744;
        float r32746 = atan2(1.0, 0.0);
        float r32747 = t;
        float r32748 = r32746 * r32747;
        float r32749 = 2;
        float r32750 = 3;
        float r32751 = r32750 * r32743;
        float r32752 = r32740 - r32751;
        float r32753 = r32749 * r32752;
        float r32754 = sqrt(r32753);
        float r32755 = r32748 * r32754;
        float r32756 = r32740 - r32743;
        float r32757 = r32755 * r32756;
        float r32758 = r32745 / r32757;
        return r32758;
}

double f_id(double v, double t) {
        double r32759 = 1;
        double r32760 = 5;
        double r32761 = v;
        double r32762 = r32761 * r32761;
        double r32763 = r32760 * r32762;
        double r32764 = r32759 - r32763;
        double r32765 = atan2(1.0, 0.0);
        double r32766 = t;
        double r32767 = r32765 * r32766;
        double r32768 = 2;
        double r32769 = 3;
        double r32770 = r32769 * r32762;
        double r32771 = r32759 - r32770;
        double r32772 = r32768 * r32771;
        double r32773 = sqrt(r32772);
        double r32774 = r32767 * r32773;
        double r32775 = r32759 - r32762;
        double r32776 = r32774 * r32775;
        double r32777 = r32764 / r32776;
        return r32777;
}


double f_of(float v, float t) {
        float r32778 = 1;
        float r32779 = t;
        float r32780 = r32778 / r32779;
        float r32781 = atan2(1.0, 0.0);
        float r32782 = 2;
        float r32783 = sqrt(r32782);
        float r32784 = r32781 * r32783;
        float r32785 = r32780 / r32784;
        float r32786 = 4;
        float r32787 = r32786 / r32779;
        float r32788 = r32787 / r32783;
        float r32789 = v;
        float r32790 = pow(r32789, r32786);
        float r32791 = r32790 / r32781;
        float r32792 = r32781 / r32789;
        float r32793 = r32789 / r32792;
        float r32794 = r32791 + r32793;
        float r32795 = r32788 * r32794;
        float r32796 = r32785 - r32795;
        return r32796;
}

double f_od(double v, double t) {
        double r32797 = 1;
        double r32798 = t;
        double r32799 = r32797 / r32798;
        double r32800 = atan2(1.0, 0.0);
        double r32801 = 2;
        double r32802 = sqrt(r32801);
        double r32803 = r32800 * r32802;
        double r32804 = r32799 / r32803;
        double r32805 = 4;
        double r32806 = r32805 / r32798;
        double r32807 = r32806 / r32802;
        double r32808 = v;
        double r32809 = pow(r32808, r32805);
        double r32810 = r32809 / r32800;
        double r32811 = r32800 / r32808;
        double r32812 = r32808 / r32811;
        double r32813 = r32810 + r32812;
        double r32814 = r32807 * r32813;
        double r32815 = r32804 - r32814;
        return r32815;
}

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 r32816, r32817, r32818, r32819, r32820, r32821, r32822, r32823, r32824, r32825, r32826, r32827, r32828, r32829, r32830, r32831, r32832, r32833, r32834;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r32816, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r32817, "5", 10, MPFR_RNDN);
        mpfr_init(r32818);
        mpfr_init(r32819);
        mpfr_init(r32820);
        mpfr_init(r32821);
        mpfr_init(r32822);
        mpfr_init(r32823);
        mpfr_init(r32824);
        mpfr_init_set_str(r32825, "2", 10, MPFR_RNDN);
        mpfr_init_set_str(r32826, "3", 10, MPFR_RNDN);
        mpfr_init(r32827);
        mpfr_init(r32828);
        mpfr_init(r32829);
        mpfr_init(r32830);
        mpfr_init(r32831);
        mpfr_init(r32832);
        mpfr_init(r32833);
        mpfr_init(r32834);
}

double f_im(double v, double t) {
        ;
        ;
        mpfr_set_d(r32818, v, MPFR_RNDN);
        mpfr_mul(r32819, r32818, r32818, MPFR_RNDN);
        mpfr_mul(r32820, r32817, r32819, MPFR_RNDN);
        mpfr_sub(r32821, r32816, r32820, MPFR_RNDN);
        mpfr_const_pi(r32822, MPFR_RNDN);
        mpfr_set_d(r32823, t, MPFR_RNDN);
        mpfr_mul(r32824, r32822, r32823, MPFR_RNDN);
        ;
        ;
        mpfr_mul(r32827, r32826, r32819, MPFR_RNDN);
        mpfr_sub(r32828, r32816, r32827, MPFR_RNDN);
        mpfr_mul(r32829, r32825, r32828, MPFR_RNDN);
        mpfr_sqrt(r32830, r32829, MPFR_RNDN);
        mpfr_mul(r32831, r32824, r32830, MPFR_RNDN);
        mpfr_sub(r32832, r32816, r32819, MPFR_RNDN);
        mpfr_mul(r32833, r32831, r32832, MPFR_RNDN);
        mpfr_div(r32834, r32821, r32833, MPFR_RNDN);
        return mpfr_get_d(r32834, MPFR_RNDN);
}

static mpfr_t r32835, r32836, r32837, r32838, r32839, r32840, r32841, r32842, r32843, r32844, r32845, r32846, r32847, r32848, r32849, r32850, r32851, r32852, r32853;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r32835, "1", 10, MPFR_RNDN);
        mpfr_init(r32836);
        mpfr_init(r32837);
        mpfr_init(r32838);
        mpfr_init_set_str(r32839, "2", 10, MPFR_RNDN);
        mpfr_init(r32840);
        mpfr_init(r32841);
        mpfr_init(r32842);
        mpfr_init_set_str(r32843, "4", 10, MPFR_RNDN);
        mpfr_init(r32844);
        mpfr_init(r32845);
        mpfr_init(r32846);
        mpfr_init(r32847);
        mpfr_init(r32848);
        mpfr_init(r32849);
        mpfr_init(r32850);
        mpfr_init(r32851);
        mpfr_init(r32852);
        mpfr_init(r32853);
}

double f_fm(double v, double t) {
        ;
        mpfr_set_d(r32836, t, MPFR_RNDN);
        mpfr_div(r32837, r32835, r32836, MPFR_RNDN);
        mpfr_const_pi(r32838, MPFR_RNDN);
        ;
        mpfr_sqrt(r32840, r32839, MPFR_RNDN);
        mpfr_mul(r32841, r32838, r32840, MPFR_RNDN);
        mpfr_div(r32842, r32837, r32841, MPFR_RNDN);
        ;
        mpfr_div(r32844, r32843, r32836, MPFR_RNDN);
        mpfr_div(r32845, r32844, r32840, MPFR_RNDN);
        mpfr_set_d(r32846, v, MPFR_RNDN);
        mpfr_pow(r32847, r32846, r32843, MPFR_RNDN);
        mpfr_div(r32848, r32847, r32838, MPFR_RNDN);
        mpfr_div(r32849, r32838, r32846, MPFR_RNDN);
        mpfr_div(r32850, r32846, r32849, MPFR_RNDN);
        mpfr_add(r32851, r32848, r32850, MPFR_RNDN);
        mpfr_mul(r32852, r32845, r32851, MPFR_RNDN);
        mpfr_sub(r32853, r32842, r32852, MPFR_RNDN);
        return mpfr_get_d(r32853, MPFR_RNDN);
}

static mpfr_t r32854, r32855, r32856, r32857, r32858, r32859, r32860, r32861, r32862, r32863, r32864, r32865, r32866, r32867, r32868, r32869, r32870, r32871, r32872;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r32854, "1", 10, MPFR_RNDN);
        mpfr_init(r32855);
        mpfr_init(r32856);
        mpfr_init(r32857);
        mpfr_init_set_str(r32858, "2", 10, MPFR_RNDN);
        mpfr_init(r32859);
        mpfr_init(r32860);
        mpfr_init(r32861);
        mpfr_init_set_str(r32862, "4", 10, MPFR_RNDN);
        mpfr_init(r32863);
        mpfr_init(r32864);
        mpfr_init(r32865);
        mpfr_init(r32866);
        mpfr_init(r32867);
        mpfr_init(r32868);
        mpfr_init(r32869);
        mpfr_init(r32870);
        mpfr_init(r32871);
        mpfr_init(r32872);
}

double f_dm(double v, double t) {
        ;
        mpfr_set_d(r32855, t, MPFR_RNDN);
        mpfr_div(r32856, r32854, r32855, MPFR_RNDN);
        mpfr_const_pi(r32857, MPFR_RNDN);
        ;
        mpfr_sqrt(r32859, r32858, MPFR_RNDN);
        mpfr_mul(r32860, r32857, r32859, MPFR_RNDN);
        mpfr_div(r32861, r32856, r32860, MPFR_RNDN);
        ;
        mpfr_div(r32863, r32862, r32855, MPFR_RNDN);
        mpfr_div(r32864, r32863, r32859, MPFR_RNDN);
        mpfr_set_d(r32865, v, MPFR_RNDN);
        mpfr_pow(r32866, r32865, r32862, MPFR_RNDN);
        mpfr_div(r32867, r32866, r32857, MPFR_RNDN);
        mpfr_div(r32868, r32857, r32865, MPFR_RNDN);
        mpfr_div(r32869, r32865, r32868, MPFR_RNDN);
        mpfr_add(r32870, r32867, r32869, MPFR_RNDN);
        mpfr_mul(r32871, r32864, r32870, MPFR_RNDN);
        mpfr_sub(r32872, r32861, r32871, MPFR_RNDN);
        return mpfr_get_d(r32872, MPFR_RNDN);
}

