#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 r32787 = 1;
        float r32788 = 5;
        float r32789 = v;
        float r32790 = r32789 * r32789;
        float r32791 = r32788 * r32790;
        float r32792 = r32787 - r32791;
        float r32793 = atan2(1.0, 0.0);
        float r32794 = t;
        float r32795 = r32793 * r32794;
        float r32796 = 2;
        float r32797 = 3;
        float r32798 = r32797 * r32790;
        float r32799 = r32787 - r32798;
        float r32800 = r32796 * r32799;
        float r32801 = sqrt(r32800);
        float r32802 = r32795 * r32801;
        float r32803 = r32787 - r32790;
        float r32804 = r32802 * r32803;
        float r32805 = r32792 / r32804;
        return r32805;
}

double f_id(double v, double t) {
        double r32806 = 1;
        double r32807 = 5;
        double r32808 = v;
        double r32809 = r32808 * r32808;
        double r32810 = r32807 * r32809;
        double r32811 = r32806 - r32810;
        double r32812 = atan2(1.0, 0.0);
        double r32813 = t;
        double r32814 = r32812 * r32813;
        double r32815 = 2;
        double r32816 = 3;
        double r32817 = r32816 * r32809;
        double r32818 = r32806 - r32817;
        double r32819 = r32815 * r32818;
        double r32820 = sqrt(r32819);
        double r32821 = r32814 * r32820;
        double r32822 = r32806 - r32809;
        double r32823 = r32821 * r32822;
        double r32824 = r32811 / r32823;
        return r32824;
}


double f_of(float v, float t) {
        float r32825 = 1;
        float r32826 = t;
        float r32827 = r32825 / r32826;
        float r32828 = atan2(1.0, 0.0);
        float r32829 = 2;
        float r32830 = sqrt(r32829);
        float r32831 = r32828 * r32830;
        float r32832 = r32827 / r32831;
        float r32833 = 4;
        float r32834 = r32833 / r32826;
        float r32835 = r32834 / r32830;
        float r32836 = v;
        float r32837 = pow(r32836, r32833);
        float r32838 = r32837 / r32828;
        float r32839 = r32828 / r32836;
        float r32840 = r32836 / r32839;
        float r32841 = r32838 + r32840;
        float r32842 = r32835 * r32841;
        float r32843 = r32832 - r32842;
        return r32843;
}

double f_od(double v, double t) {
        double r32844 = 1;
        double r32845 = t;
        double r32846 = r32844 / r32845;
        double r32847 = atan2(1.0, 0.0);
        double r32848 = 2;
        double r32849 = sqrt(r32848);
        double r32850 = r32847 * r32849;
        double r32851 = r32846 / r32850;
        double r32852 = 4;
        double r32853 = r32852 / r32845;
        double r32854 = r32853 / r32849;
        double r32855 = v;
        double r32856 = pow(r32855, r32852);
        double r32857 = r32856 / r32847;
        double r32858 = r32847 / r32855;
        double r32859 = r32855 / r32858;
        double r32860 = r32857 + r32859;
        double r32861 = r32854 * r32860;
        double r32862 = r32851 - r32861;
        return r32862;
}

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 r32863, r32864, r32865, r32866, r32867, r32868, r32869, r32870, r32871, r32872, r32873, r32874, r32875, r32876, r32877, r32878, r32879, r32880, r32881;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r32863, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r32864, "5", 10, MPFR_RNDN);
        mpfr_init(r32865);
        mpfr_init(r32866);
        mpfr_init(r32867);
        mpfr_init(r32868);
        mpfr_init(r32869);
        mpfr_init(r32870);
        mpfr_init(r32871);
        mpfr_init_set_str(r32872, "2", 10, MPFR_RNDN);
        mpfr_init_set_str(r32873, "3", 10, MPFR_RNDN);
        mpfr_init(r32874);
        mpfr_init(r32875);
        mpfr_init(r32876);
        mpfr_init(r32877);
        mpfr_init(r32878);
        mpfr_init(r32879);
        mpfr_init(r32880);
        mpfr_init(r32881);
}

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

static mpfr_t r32882, r32883, r32884, r32885, r32886, r32887, r32888, r32889, r32890, r32891, r32892, r32893, r32894, r32895, r32896, r32897, r32898, r32899, r32900;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r32882, "1", 10, MPFR_RNDN);
        mpfr_init(r32883);
        mpfr_init(r32884);
        mpfr_init(r32885);
        mpfr_init_set_str(r32886, "2", 10, MPFR_RNDN);
        mpfr_init(r32887);
        mpfr_init(r32888);
        mpfr_init(r32889);
        mpfr_init_set_str(r32890, "4", 10, MPFR_RNDN);
        mpfr_init(r32891);
        mpfr_init(r32892);
        mpfr_init(r32893);
        mpfr_init(r32894);
        mpfr_init(r32895);
        mpfr_init(r32896);
        mpfr_init(r32897);
        mpfr_init(r32898);
        mpfr_init(r32899);
        mpfr_init(r32900);
}

double f_fm(double v, double t) {
        ;
        mpfr_set_d(r32883, t, MPFR_RNDN);
        mpfr_div(r32884, r32882, r32883, MPFR_RNDN);
        mpfr_const_pi(r32885, MPFR_RNDN);
        ;
        mpfr_sqrt(r32887, r32886, MPFR_RNDN);
        mpfr_mul(r32888, r32885, r32887, MPFR_RNDN);
        mpfr_div(r32889, r32884, r32888, MPFR_RNDN);
        ;
        mpfr_div(r32891, r32890, r32883, MPFR_RNDN);
        mpfr_div(r32892, r32891, r32887, MPFR_RNDN);
        mpfr_set_d(r32893, v, MPFR_RNDN);
        mpfr_pow(r32894, r32893, r32890, MPFR_RNDN);
        mpfr_div(r32895, r32894, r32885, MPFR_RNDN);
        mpfr_div(r32896, r32885, r32893, MPFR_RNDN);
        mpfr_div(r32897, r32893, r32896, MPFR_RNDN);
        mpfr_add(r32898, r32895, r32897, MPFR_RNDN);
        mpfr_mul(r32899, r32892, r32898, MPFR_RNDN);
        mpfr_sub(r32900, r32889, r32899, MPFR_RNDN);
        return mpfr_get_d(r32900, MPFR_RNDN);
}

static mpfr_t r32901, r32902, r32903, r32904, r32905, r32906, r32907, r32908, r32909, r32910, r32911, r32912, r32913, r32914, r32915, r32916, r32917, r32918, r32919;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r32901, "1", 10, MPFR_RNDN);
        mpfr_init(r32902);
        mpfr_init(r32903);
        mpfr_init(r32904);
        mpfr_init_set_str(r32905, "2", 10, MPFR_RNDN);
        mpfr_init(r32906);
        mpfr_init(r32907);
        mpfr_init(r32908);
        mpfr_init_set_str(r32909, "4", 10, MPFR_RNDN);
        mpfr_init(r32910);
        mpfr_init(r32911);
        mpfr_init(r32912);
        mpfr_init(r32913);
        mpfr_init(r32914);
        mpfr_init(r32915);
        mpfr_init(r32916);
        mpfr_init(r32917);
        mpfr_init(r32918);
        mpfr_init(r32919);
}

double f_dm(double v, double t) {
        ;
        mpfr_set_d(r32902, t, MPFR_RNDN);
        mpfr_div(r32903, r32901, r32902, MPFR_RNDN);
        mpfr_const_pi(r32904, MPFR_RNDN);
        ;
        mpfr_sqrt(r32906, r32905, MPFR_RNDN);
        mpfr_mul(r32907, r32904, r32906, MPFR_RNDN);
        mpfr_div(r32908, r32903, r32907, MPFR_RNDN);
        ;
        mpfr_div(r32910, r32909, r32902, MPFR_RNDN);
        mpfr_div(r32911, r32910, r32906, MPFR_RNDN);
        mpfr_set_d(r32912, v, MPFR_RNDN);
        mpfr_pow(r32913, r32912, r32909, MPFR_RNDN);
        mpfr_div(r32914, r32913, r32904, MPFR_RNDN);
        mpfr_div(r32915, r32904, r32912, MPFR_RNDN);
        mpfr_div(r32916, r32912, r32915, MPFR_RNDN);
        mpfr_add(r32917, r32914, r32916, MPFR_RNDN);
        mpfr_mul(r32918, r32911, r32917, MPFR_RNDN);
        mpfr_sub(r32919, r32908, r32918, MPFR_RNDN);
        return mpfr_get_d(r32919, MPFR_RNDN);
}

