#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 r32747 = 1;
        float r32748 = 5;
        float r32749 = v;
        float r32750 = r32749 * r32749;
        float r32751 = r32748 * r32750;
        float r32752 = r32747 - r32751;
        float r32753 = atan2(1.0, 0.0);
        float r32754 = t;
        float r32755 = r32753 * r32754;
        float r32756 = 2;
        float r32757 = 3;
        float r32758 = r32757 * r32750;
        float r32759 = r32747 - r32758;
        float r32760 = r32756 * r32759;
        float r32761 = sqrt(r32760);
        float r32762 = r32755 * r32761;
        float r32763 = r32747 - r32750;
        float r32764 = r32762 * r32763;
        float r32765 = r32752 / r32764;
        return r32765;
}

double f_id(double v, double t) {
        double r32766 = 1;
        double r32767 = 5;
        double r32768 = v;
        double r32769 = r32768 * r32768;
        double r32770 = r32767 * r32769;
        double r32771 = r32766 - r32770;
        double r32772 = atan2(1.0, 0.0);
        double r32773 = t;
        double r32774 = r32772 * r32773;
        double r32775 = 2;
        double r32776 = 3;
        double r32777 = r32776 * r32769;
        double r32778 = r32766 - r32777;
        double r32779 = r32775 * r32778;
        double r32780 = sqrt(r32779);
        double r32781 = r32774 * r32780;
        double r32782 = r32766 - r32769;
        double r32783 = r32781 * r32782;
        double r32784 = r32771 / r32783;
        return r32784;
}


double f_of(float v, float t) {
        float r32785 = 1;
        float r32786 = t;
        float r32787 = r32785 / r32786;
        float r32788 = atan2(1.0, 0.0);
        float r32789 = 2;
        float r32790 = sqrt(r32789);
        float r32791 = r32788 * r32790;
        float r32792 = r32787 / r32791;
        float r32793 = 4;
        float r32794 = r32793 / r32786;
        float r32795 = r32794 / r32790;
        float r32796 = v;
        float r32797 = pow(r32796, r32793);
        float r32798 = r32797 / r32788;
        float r32799 = r32788 / r32796;
        float r32800 = r32796 / r32799;
        float r32801 = r32798 + r32800;
        float r32802 = r32795 * r32801;
        float r32803 = r32792 - r32802;
        return r32803;
}

double f_od(double v, double t) {
        double r32804 = 1;
        double r32805 = t;
        double r32806 = r32804 / r32805;
        double r32807 = atan2(1.0, 0.0);
        double r32808 = 2;
        double r32809 = sqrt(r32808);
        double r32810 = r32807 * r32809;
        double r32811 = r32806 / r32810;
        double r32812 = 4;
        double r32813 = r32812 / r32805;
        double r32814 = r32813 / r32809;
        double r32815 = v;
        double r32816 = pow(r32815, r32812);
        double r32817 = r32816 / r32807;
        double r32818 = r32807 / r32815;
        double r32819 = r32815 / r32818;
        double r32820 = r32817 + r32819;
        double r32821 = r32814 * r32820;
        double r32822 = r32811 - r32821;
        return r32822;
}

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 r32823, r32824, r32825, r32826, r32827, r32828, r32829, r32830, r32831, r32832, r32833, r32834, r32835, r32836, r32837, r32838, r32839, r32840, r32841;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r32823, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r32824, "5", 10, MPFR_RNDN);
        mpfr_init(r32825);
        mpfr_init(r32826);
        mpfr_init(r32827);
        mpfr_init(r32828);
        mpfr_init(r32829);
        mpfr_init(r32830);
        mpfr_init(r32831);
        mpfr_init_set_str(r32832, "2", 10, MPFR_RNDN);
        mpfr_init_set_str(r32833, "3", 10, MPFR_RNDN);
        mpfr_init(r32834);
        mpfr_init(r32835);
        mpfr_init(r32836);
        mpfr_init(r32837);
        mpfr_init(r32838);
        mpfr_init(r32839);
        mpfr_init(r32840);
        mpfr_init(r32841);
}

double f_im(double v, double t) {
        ;
        ;
        mpfr_set_d(r32825, v, MPFR_RNDN);
        mpfr_mul(r32826, r32825, r32825, MPFR_RNDN);
        mpfr_mul(r32827, r32824, r32826, MPFR_RNDN);
        mpfr_sub(r32828, r32823, r32827, MPFR_RNDN);
        mpfr_const_pi(r32829, MPFR_RNDN);
        mpfr_set_d(r32830, t, MPFR_RNDN);
        mpfr_mul(r32831, r32829, r32830, MPFR_RNDN);
        ;
        ;
        mpfr_mul(r32834, r32833, r32826, MPFR_RNDN);
        mpfr_sub(r32835, r32823, r32834, MPFR_RNDN);
        mpfr_mul(r32836, r32832, r32835, MPFR_RNDN);
        mpfr_sqrt(r32837, r32836, MPFR_RNDN);
        mpfr_mul(r32838, r32831, r32837, MPFR_RNDN);
        mpfr_sub(r32839, r32823, r32826, MPFR_RNDN);
        mpfr_mul(r32840, r32838, r32839, MPFR_RNDN);
        mpfr_div(r32841, r32828, r32840, MPFR_RNDN);
        return mpfr_get_d(r32841, MPFR_RNDN);
}

static mpfr_t r32842, r32843, r32844, r32845, r32846, r32847, r32848, r32849, r32850, r32851, r32852, r32853, r32854, r32855, r32856, r32857, r32858, r32859, r32860;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r32842, "1", 10, MPFR_RNDN);
        mpfr_init(r32843);
        mpfr_init(r32844);
        mpfr_init(r32845);
        mpfr_init_set_str(r32846, "2", 10, MPFR_RNDN);
        mpfr_init(r32847);
        mpfr_init(r32848);
        mpfr_init(r32849);
        mpfr_init_set_str(r32850, "4", 10, MPFR_RNDN);
        mpfr_init(r32851);
        mpfr_init(r32852);
        mpfr_init(r32853);
        mpfr_init(r32854);
        mpfr_init(r32855);
        mpfr_init(r32856);
        mpfr_init(r32857);
        mpfr_init(r32858);
        mpfr_init(r32859);
        mpfr_init(r32860);
}

double f_fm(double v, double t) {
        ;
        mpfr_set_d(r32843, t, MPFR_RNDN);
        mpfr_div(r32844, r32842, r32843, MPFR_RNDN);
        mpfr_const_pi(r32845, MPFR_RNDN);
        ;
        mpfr_sqrt(r32847, r32846, MPFR_RNDN);
        mpfr_mul(r32848, r32845, r32847, MPFR_RNDN);
        mpfr_div(r32849, r32844, r32848, MPFR_RNDN);
        ;
        mpfr_div(r32851, r32850, r32843, MPFR_RNDN);
        mpfr_div(r32852, r32851, r32847, MPFR_RNDN);
        mpfr_set_d(r32853, v, MPFR_RNDN);
        mpfr_pow(r32854, r32853, r32850, MPFR_RNDN);
        mpfr_div(r32855, r32854, r32845, MPFR_RNDN);
        mpfr_div(r32856, r32845, r32853, MPFR_RNDN);
        mpfr_div(r32857, r32853, r32856, MPFR_RNDN);
        mpfr_add(r32858, r32855, r32857, MPFR_RNDN);
        mpfr_mul(r32859, r32852, r32858, MPFR_RNDN);
        mpfr_sub(r32860, r32849, r32859, MPFR_RNDN);
        return mpfr_get_d(r32860, MPFR_RNDN);
}

static mpfr_t r32861, r32862, r32863, r32864, r32865, r32866, r32867, r32868, r32869, r32870, r32871, r32872, r32873, r32874, r32875, r32876, r32877, r32878, r32879;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r32861, "1", 10, MPFR_RNDN);
        mpfr_init(r32862);
        mpfr_init(r32863);
        mpfr_init(r32864);
        mpfr_init_set_str(r32865, "2", 10, MPFR_RNDN);
        mpfr_init(r32866);
        mpfr_init(r32867);
        mpfr_init(r32868);
        mpfr_init_set_str(r32869, "4", 10, MPFR_RNDN);
        mpfr_init(r32870);
        mpfr_init(r32871);
        mpfr_init(r32872);
        mpfr_init(r32873);
        mpfr_init(r32874);
        mpfr_init(r32875);
        mpfr_init(r32876);
        mpfr_init(r32877);
        mpfr_init(r32878);
        mpfr_init(r32879);
}

double f_dm(double v, double t) {
        ;
        mpfr_set_d(r32862, t, MPFR_RNDN);
        mpfr_div(r32863, r32861, r32862, MPFR_RNDN);
        mpfr_const_pi(r32864, MPFR_RNDN);
        ;
        mpfr_sqrt(r32866, r32865, MPFR_RNDN);
        mpfr_mul(r32867, r32864, r32866, MPFR_RNDN);
        mpfr_div(r32868, r32863, r32867, MPFR_RNDN);
        ;
        mpfr_div(r32870, r32869, r32862, MPFR_RNDN);
        mpfr_div(r32871, r32870, r32866, MPFR_RNDN);
        mpfr_set_d(r32872, v, MPFR_RNDN);
        mpfr_pow(r32873, r32872, r32869, MPFR_RNDN);
        mpfr_div(r32874, r32873, r32864, MPFR_RNDN);
        mpfr_div(r32875, r32864, r32872, MPFR_RNDN);
        mpfr_div(r32876, r32872, r32875, MPFR_RNDN);
        mpfr_add(r32877, r32874, r32876, MPFR_RNDN);
        mpfr_mul(r32878, r32871, r32877, MPFR_RNDN);
        mpfr_sub(r32879, r32868, r32878, MPFR_RNDN);
        return mpfr_get_d(r32879, MPFR_RNDN);
}

