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

char *name = "Falkner and Boettcher, Appendix B, 2";

double f_if(float v) {
        float r32826 = 2;
        float r32827 = sqrt(r32826);
        float r32828 = 4;
        float r32829 = r32827 / r32828;
        float r32830 = 1;
        float r32831 = 3;
        float r32832 = v;
        float r32833 = r32832 * r32832;
        float r32834 = r32831 * r32833;
        float r32835 = r32830 - r32834;
        float r32836 = sqrt(r32835);
        float r32837 = r32829 * r32836;
        float r32838 = r32830 - r32833;
        float r32839 = r32837 * r32838;
        return r32839;
}

double f_id(double v) {
        double r32840 = 2;
        double r32841 = sqrt(r32840);
        double r32842 = 4;
        double r32843 = r32841 / r32842;
        double r32844 = 1;
        double r32845 = 3;
        double r32846 = v;
        double r32847 = r32846 * r32846;
        double r32848 = r32845 * r32847;
        double r32849 = r32844 - r32848;
        double r32850 = sqrt(r32849);
        double r32851 = r32843 * r32850;
        double r32852 = r32844 - r32847;
        double r32853 = r32851 * r32852;
        return r32853;
}


double f_of(float v) {
        float r32854 = 2;
        float r32855 = sqrt(r32854);
        float r32856 = 4;
        float r32857 = r32855 / r32856;
        float r32858 = 1;
        float r32859 = 3;
        float r32860 = v;
        float r32861 = r32860 * r32860;
        float r32862 = r32859 * r32861;
        float r32863 = r32858 - r32862;
        float r32864 = sqrt(r32863);
        float r32865 = r32857 * r32864;
        float r32866 = r32858 - r32861;
        float r32867 = r32865 * r32866;
        return r32867;
}

double f_od(double v) {
        double r32868 = 2;
        double r32869 = sqrt(r32868);
        double r32870 = 4;
        double r32871 = r32869 / r32870;
        double r32872 = 1;
        double r32873 = 3;
        double r32874 = v;
        double r32875 = r32874 * r32874;
        double r32876 = r32873 * r32875;
        double r32877 = r32872 - r32876;
        double r32878 = sqrt(r32877);
        double r32879 = r32871 * r32878;
        double r32880 = r32872 - r32875;
        double r32881 = r32879 * r32880;
        return r32881;
}

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 r32882, r32883, r32884, r32885, r32886, r32887, r32888, r32889, r32890, r32891, r32892, r32893, r32894, r32895;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r32882, "2", 10, MPFR_RNDN);
        mpfr_init(r32883);
        mpfr_init_set_str(r32884, "4", 10, MPFR_RNDN);
        mpfr_init(r32885);
        mpfr_init_set_str(r32886, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r32887, "3", 10, MPFR_RNDN);
        mpfr_init(r32888);
        mpfr_init(r32889);
        mpfr_init(r32890);
        mpfr_init(r32891);
        mpfr_init(r32892);
        mpfr_init(r32893);
        mpfr_init(r32894);
        mpfr_init(r32895);
}

double f_im(double v) {
        ;
        mpfr_sqrt(r32883, r32882, MPFR_RNDN);
        ;
        mpfr_div(r32885, r32883, r32884, MPFR_RNDN);
        ;
        ;
        mpfr_set_d(r32888, v, MPFR_RNDN);
        mpfr_mul(r32889, r32888, r32888, MPFR_RNDN);
        mpfr_mul(r32890, r32887, r32889, MPFR_RNDN);
        mpfr_sub(r32891, r32886, r32890, MPFR_RNDN);
        mpfr_sqrt(r32892, r32891, MPFR_RNDN);
        mpfr_mul(r32893, r32885, r32892, MPFR_RNDN);
        mpfr_sub(r32894, r32886, r32889, MPFR_RNDN);
        mpfr_mul(r32895, r32893, r32894, MPFR_RNDN);
        return mpfr_get_d(r32895, MPFR_RNDN);
}

static mpfr_t r32896, r32897, r32898, r32899, r32900, r32901, r32902, r32903, r32904, r32905, r32906, r32907, r32908, r32909;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r32896, "2", 10, MPFR_RNDN);
        mpfr_init(r32897);
        mpfr_init_set_str(r32898, "4", 10, MPFR_RNDN);
        mpfr_init(r32899);
        mpfr_init_set_str(r32900, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r32901, "3", 10, MPFR_RNDN);
        mpfr_init(r32902);
        mpfr_init(r32903);
        mpfr_init(r32904);
        mpfr_init(r32905);
        mpfr_init(r32906);
        mpfr_init(r32907);
        mpfr_init(r32908);
        mpfr_init(r32909);
}

double f_fm(double v) {
        ;
        mpfr_sqrt(r32897, r32896, MPFR_RNDN);
        ;
        mpfr_div(r32899, r32897, r32898, MPFR_RNDN);
        ;
        ;
        mpfr_set_d(r32902, v, MPFR_RNDN);
        mpfr_mul(r32903, r32902, r32902, MPFR_RNDN);
        mpfr_mul(r32904, r32901, r32903, MPFR_RNDN);
        mpfr_sub(r32905, r32900, r32904, MPFR_RNDN);
        mpfr_sqrt(r32906, r32905, MPFR_RNDN);
        mpfr_mul(r32907, r32899, r32906, MPFR_RNDN);
        mpfr_sub(r32908, r32900, r32903, MPFR_RNDN);
        mpfr_mul(r32909, r32907, r32908, MPFR_RNDN);
        return mpfr_get_d(r32909, MPFR_RNDN);
}

static mpfr_t r32910, r32911, r32912, r32913, r32914, r32915, r32916, r32917, r32918, r32919, r32920, r32921, r32922, r32923;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r32910, "2", 10, MPFR_RNDN);
        mpfr_init(r32911);
        mpfr_init_set_str(r32912, "4", 10, MPFR_RNDN);
        mpfr_init(r32913);
        mpfr_init_set_str(r32914, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r32915, "3", 10, MPFR_RNDN);
        mpfr_init(r32916);
        mpfr_init(r32917);
        mpfr_init(r32918);
        mpfr_init(r32919);
        mpfr_init(r32920);
        mpfr_init(r32921);
        mpfr_init(r32922);
        mpfr_init(r32923);
}

double f_dm(double v) {
        ;
        mpfr_sqrt(r32911, r32910, MPFR_RNDN);
        ;
        mpfr_div(r32913, r32911, r32912, MPFR_RNDN);
        ;
        ;
        mpfr_set_d(r32916, v, MPFR_RNDN);
        mpfr_mul(r32917, r32916, r32916, MPFR_RNDN);
        mpfr_mul(r32918, r32915, r32917, MPFR_RNDN);
        mpfr_sub(r32919, r32914, r32918, MPFR_RNDN);
        mpfr_sqrt(r32920, r32919, MPFR_RNDN);
        mpfr_mul(r32921, r32913, r32920, MPFR_RNDN);
        mpfr_sub(r32922, r32914, r32917, MPFR_RNDN);
        mpfr_mul(r32923, r32921, r32922, MPFR_RNDN);
        return mpfr_get_d(r32923, MPFR_RNDN);
}

