#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 r27865 = a;
        float r27866 = r27865 * r27865;
        float r27867 = b;
        float r27868 = r27867 * r27867;
        float r27869 = r27866 + r27868;
        float r27870 = 2;
        float r27871 = pow(r27869, r27870);
        float r27872 = 4;
        float r27873 = r27872 * r27868;
        float r27874 = r27871 + r27873;
        float r27875 = 1;
        float r27876 = r27874 - r27875;
        return r27876;
}

double f_id(double a, double b) {
        double r27877 = a;
        double r27878 = r27877 * r27877;
        double r27879 = b;
        double r27880 = r27879 * r27879;
        double r27881 = r27878 + r27880;
        double r27882 = 2;
        double r27883 = pow(r27881, r27882);
        double r27884 = 4;
        double r27885 = r27884 * r27880;
        double r27886 = r27883 + r27885;
        double r27887 = 1;
        double r27888 = r27886 - r27887;
        return r27888;
}


double f_of(float a, float b) {
        float r27889 = a;
        float r27890 = r27889 * r27889;
        float r27891 = b;
        float r27892 = r27891 * r27891;
        float r27893 = r27890 + r27892;
        float r27894 = 2;
        float r27895 = pow(r27893, r27894);
        float r27896 = 4;
        float r27897 = r27896 * r27892;
        float r27898 = r27895 + r27897;
        float r27899 = 1;
        float r27900 = r27898 - r27899;
        return r27900;
}

double f_od(double a, double b) {
        double r27901 = a;
        double r27902 = r27901 * r27901;
        double r27903 = b;
        double r27904 = r27903 * r27903;
        double r27905 = r27902 + r27904;
        double r27906 = 2;
        double r27907 = pow(r27905, r27906);
        double r27908 = 4;
        double r27909 = r27908 * r27904;
        double r27910 = r27907 + r27909;
        double r27911 = 1;
        double r27912 = r27910 - r27911;
        return r27912;
}

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 r27913, r27914, r27915, r27916, r27917, r27918, r27919, r27920, r27921, r27922, r27923, r27924;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(336);
        mpfr_init(r27913);
        mpfr_init(r27914);
        mpfr_init(r27915);
        mpfr_init(r27916);
        mpfr_init(r27917);
        mpfr_init_set_str(r27918, "2", 10, MPFR_RNDN);
        mpfr_init(r27919);
        mpfr_init_set_str(r27920, "4", 10, MPFR_RNDN);
        mpfr_init(r27921);
        mpfr_init(r27922);
        mpfr_init_set_str(r27923, "1", 10, MPFR_RNDN);
        mpfr_init(r27924);
}

double f_im(double a, double b) {
        mpfr_set_d(r27913, a, MPFR_RNDN);
        mpfr_mul(r27914, r27913, r27913, MPFR_RNDN);
        mpfr_set_d(r27915, b, MPFR_RNDN);
        mpfr_mul(r27916, r27915, r27915, MPFR_RNDN);
        mpfr_add(r27917, r27914, r27916, MPFR_RNDN);
        ;
        mpfr_pow(r27919, r27917, r27918, MPFR_RNDN);
        ;
        mpfr_mul(r27921, r27920, r27916, MPFR_RNDN);
        mpfr_add(r27922, r27919, r27921, MPFR_RNDN);
        ;
        mpfr_sub(r27924, r27922, r27923, MPFR_RNDN);
        return mpfr_get_d(r27924, MPFR_RNDN);
}

static mpfr_t r27925, r27926, r27927, r27928, r27929, r27930, r27931, r27932, r27933, r27934, r27935, r27936;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(336);
        mpfr_init(r27925);
        mpfr_init(r27926);
        mpfr_init(r27927);
        mpfr_init(r27928);
        mpfr_init(r27929);
        mpfr_init_set_str(r27930, "2", 10, MPFR_RNDN);
        mpfr_init(r27931);
        mpfr_init_set_str(r27932, "4", 10, MPFR_RNDN);
        mpfr_init(r27933);
        mpfr_init(r27934);
        mpfr_init_set_str(r27935, "1", 10, MPFR_RNDN);
        mpfr_init(r27936);
}

double f_fm(double a, double b) {
        mpfr_set_d(r27925, a, MPFR_RNDN);
        mpfr_mul(r27926, r27925, r27925, MPFR_RNDN);
        mpfr_set_d(r27927, b, MPFR_RNDN);
        mpfr_mul(r27928, r27927, r27927, MPFR_RNDN);
        mpfr_add(r27929, r27926, r27928, MPFR_RNDN);
        ;
        mpfr_pow(r27931, r27929, r27930, MPFR_RNDN);
        ;
        mpfr_mul(r27933, r27932, r27928, MPFR_RNDN);
        mpfr_add(r27934, r27931, r27933, MPFR_RNDN);
        ;
        mpfr_sub(r27936, r27934, r27935, MPFR_RNDN);
        return mpfr_get_d(r27936, MPFR_RNDN);
}

static mpfr_t r27937, r27938, r27939, r27940, r27941, r27942, r27943, r27944, r27945, r27946, r27947, r27948;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(336);
        mpfr_init(r27937);
        mpfr_init(r27938);
        mpfr_init(r27939);
        mpfr_init(r27940);
        mpfr_init(r27941);
        mpfr_init_set_str(r27942, "2", 10, MPFR_RNDN);
        mpfr_init(r27943);
        mpfr_init_set_str(r27944, "4", 10, MPFR_RNDN);
        mpfr_init(r27945);
        mpfr_init(r27946);
        mpfr_init_set_str(r27947, "1", 10, MPFR_RNDN);
        mpfr_init(r27948);
}

double f_dm(double a, double b) {
        mpfr_set_d(r27937, a, MPFR_RNDN);
        mpfr_mul(r27938, r27937, r27937, MPFR_RNDN);
        mpfr_set_d(r27939, b, MPFR_RNDN);
        mpfr_mul(r27940, r27939, r27939, MPFR_RNDN);
        mpfr_add(r27941, r27938, r27940, MPFR_RNDN);
        ;
        mpfr_pow(r27943, r27941, r27942, MPFR_RNDN);
        ;
        mpfr_mul(r27945, r27944, r27940, MPFR_RNDN);
        mpfr_add(r27946, r27943, r27945, MPFR_RNDN);
        ;
        mpfr_sub(r27948, r27946, r27947, MPFR_RNDN);
        return mpfr_get_d(r27948, MPFR_RNDN);
}

