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

char *name = "Bouland and Aaronson, Equation (26)";

double f_if(float a, float b) {
        float r11820 = a;
        float r11821 = r11820 * r11820;
        float r11822 = b;
        float r11823 = r11822 * r11822;
        float r11824 = r11821 + r11823;
        float r11825 = 2;
        float r11826 = pow(r11824, r11825);
        float r11827 = 4;
        float r11828 = r11827 * r11823;
        float r11829 = r11826 + r11828;
        float r11830 = 1;
        float r11831 = r11829 - r11830;
        return r11831;
}

double f_id(double a, double b) {
        double r11832 = a;
        double r11833 = r11832 * r11832;
        double r11834 = b;
        double r11835 = r11834 * r11834;
        double r11836 = r11833 + r11835;
        double r11837 = 2;
        double r11838 = pow(r11836, r11837);
        double r11839 = 4;
        double r11840 = r11839 * r11835;
        double r11841 = r11838 + r11840;
        double r11842 = 1;
        double r11843 = r11841 - r11842;
        return r11843;
}


double f_of(float a, float b) {
        float r11844 = a;
        float r11845 = r11844 * r11844;
        float r11846 = b;
        float r11847 = r11846 * r11846;
        float r11848 = r11845 + r11847;
        float r11849 = 2;
        float r11850 = pow(r11848, r11849);
        float r11851 = 4;
        float r11852 = r11851 * r11847;
        float r11853 = r11850 + r11852;
        float r11854 = 1;
        float r11855 = r11853 - r11854;
        return r11855;
}

double f_od(double a, double b) {
        double r11856 = a;
        double r11857 = r11856 * r11856;
        double r11858 = b;
        double r11859 = r11858 * r11858;
        double r11860 = r11857 + r11859;
        double r11861 = 2;
        double r11862 = pow(r11860, r11861);
        double r11863 = 4;
        double r11864 = r11863 * r11859;
        double r11865 = r11862 + r11864;
        double r11866 = 1;
        double r11867 = r11865 - r11866;
        return r11867;
}

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 r11868, r11869, r11870, r11871, r11872, r11873, r11874, r11875, r11876, r11877, r11878, r11879;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r11868);
        mpfr_init(r11869);
        mpfr_init(r11870);
        mpfr_init(r11871);
        mpfr_init(r11872);
        mpfr_init_set_str(r11873, "2", 10, MPFR_RNDN);
        mpfr_init(r11874);
        mpfr_init_set_str(r11875, "4", 10, MPFR_RNDN);
        mpfr_init(r11876);
        mpfr_init(r11877);
        mpfr_init_set_str(r11878, "1", 10, MPFR_RNDN);
        mpfr_init(r11879);
}

double f_im(double a, double b) {
        mpfr_set_d(r11868, a, MPFR_RNDN);
        mpfr_mul(r11869, r11868, r11868, MPFR_RNDN);
        mpfr_set_d(r11870, b, MPFR_RNDN);
        mpfr_mul(r11871, r11870, r11870, MPFR_RNDN);
        mpfr_add(r11872, r11869, r11871, MPFR_RNDN);
        ;
        mpfr_pow(r11874, r11872, r11873, MPFR_RNDN);
        ;
        mpfr_mul(r11876, r11875, r11871, MPFR_RNDN);
        mpfr_add(r11877, r11874, r11876, MPFR_RNDN);
        ;
        mpfr_sub(r11879, r11877, r11878, MPFR_RNDN);
        return mpfr_get_d(r11879, MPFR_RNDN);
}

static mpfr_t r11880, r11881, r11882, r11883, r11884, r11885, r11886, r11887, r11888, r11889, r11890, r11891;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r11880);
        mpfr_init(r11881);
        mpfr_init(r11882);
        mpfr_init(r11883);
        mpfr_init(r11884);
        mpfr_init_set_str(r11885, "2", 10, MPFR_RNDN);
        mpfr_init(r11886);
        mpfr_init_set_str(r11887, "4", 10, MPFR_RNDN);
        mpfr_init(r11888);
        mpfr_init(r11889);
        mpfr_init_set_str(r11890, "1", 10, MPFR_RNDN);
        mpfr_init(r11891);
}

double f_fm(double a, double b) {
        mpfr_set_d(r11880, a, MPFR_RNDN);
        mpfr_mul(r11881, r11880, r11880, MPFR_RNDN);
        mpfr_set_d(r11882, b, MPFR_RNDN);
        mpfr_mul(r11883, r11882, r11882, MPFR_RNDN);
        mpfr_add(r11884, r11881, r11883, MPFR_RNDN);
        ;
        mpfr_pow(r11886, r11884, r11885, MPFR_RNDN);
        ;
        mpfr_mul(r11888, r11887, r11883, MPFR_RNDN);
        mpfr_add(r11889, r11886, r11888, MPFR_RNDN);
        ;
        mpfr_sub(r11891, r11889, r11890, MPFR_RNDN);
        return mpfr_get_d(r11891, MPFR_RNDN);
}

static mpfr_t r11892, r11893, r11894, r11895, r11896, r11897, r11898, r11899, r11900, r11901, r11902, r11903;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r11892);
        mpfr_init(r11893);
        mpfr_init(r11894);
        mpfr_init(r11895);
        mpfr_init(r11896);
        mpfr_init_set_str(r11897, "2", 10, MPFR_RNDN);
        mpfr_init(r11898);
        mpfr_init_set_str(r11899, "4", 10, MPFR_RNDN);
        mpfr_init(r11900);
        mpfr_init(r11901);
        mpfr_init_set_str(r11902, "1", 10, MPFR_RNDN);
        mpfr_init(r11903);
}

double f_dm(double a, double b) {
        mpfr_set_d(r11892, a, MPFR_RNDN);
        mpfr_mul(r11893, r11892, r11892, MPFR_RNDN);
        mpfr_set_d(r11894, b, MPFR_RNDN);
        mpfr_mul(r11895, r11894, r11894, MPFR_RNDN);
        mpfr_add(r11896, r11893, r11895, MPFR_RNDN);
        ;
        mpfr_pow(r11898, r11896, r11897, MPFR_RNDN);
        ;
        mpfr_mul(r11900, r11899, r11895, MPFR_RNDN);
        mpfr_add(r11901, r11898, r11900, MPFR_RNDN);
        ;
        mpfr_sub(r11903, r11901, r11902, MPFR_RNDN);
        return mpfr_get_d(r11903, MPFR_RNDN);
}

