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

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

double f_if(float a, float b) {
        float r26765 = a;
        float r26766 = r26765 * r26765;
        float r26767 = b;
        float r26768 = r26767 * r26767;
        float r26769 = r26766 + r26768;
        float r26770 = 2;
        float r26771 = pow(r26769, r26770);
        float r26772 = 4;
        float r26773 = 1;
        float r26774 = r26773 + r26765;
        float r26775 = r26766 * r26774;
        float r26776 = 3;
        float r26777 = r26776 * r26765;
        float r26778 = r26773 - r26777;
        float r26779 = r26768 * r26778;
        float r26780 = r26775 + r26779;
        float r26781 = r26772 * r26780;
        float r26782 = r26771 + r26781;
        float r26783 = r26782 - r26773;
        return r26783;
}

double f_id(double a, double b) {
        double r26784 = a;
        double r26785 = r26784 * r26784;
        double r26786 = b;
        double r26787 = r26786 * r26786;
        double r26788 = r26785 + r26787;
        double r26789 = 2;
        double r26790 = pow(r26788, r26789);
        double r26791 = 4;
        double r26792 = 1;
        double r26793 = r26792 + r26784;
        double r26794 = r26785 * r26793;
        double r26795 = 3;
        double r26796 = r26795 * r26784;
        double r26797 = r26792 - r26796;
        double r26798 = r26787 * r26797;
        double r26799 = r26794 + r26798;
        double r26800 = r26791 * r26799;
        double r26801 = r26790 + r26800;
        double r26802 = r26801 - r26792;
        return r26802;
}


double f_of(float a, float b) {
        float r26803 = a;
        float r26804 = r26803 * r26803;
        float r26805 = b;
        float r26806 = r26805 * r26805;
        float r26807 = r26804 + r26806;
        float r26808 = 2;
        float r26809 = pow(r26807, r26808);
        float r26810 = 4;
        float r26811 = 1;
        float r26812 = r26811 + r26803;
        float r26813 = r26804 * r26812;
        float r26814 = 3;
        float r26815 = r26814 * r26803;
        float r26816 = r26811 - r26815;
        float r26817 = r26806 * r26816;
        float r26818 = r26813 + r26817;
        float r26819 = r26810 * r26818;
        float r26820 = r26809 + r26819;
        float r26821 = r26820 - r26811;
        return r26821;
}

double f_od(double a, double b) {
        double r26822 = a;
        double r26823 = r26822 * r26822;
        double r26824 = b;
        double r26825 = r26824 * r26824;
        double r26826 = r26823 + r26825;
        double r26827 = 2;
        double r26828 = pow(r26826, r26827);
        double r26829 = 4;
        double r26830 = 1;
        double r26831 = r26830 + r26822;
        double r26832 = r26823 * r26831;
        double r26833 = 3;
        double r26834 = r26833 * r26822;
        double r26835 = r26830 - r26834;
        double r26836 = r26825 * r26835;
        double r26837 = r26832 + r26836;
        double r26838 = r26829 * r26837;
        double r26839 = r26828 + r26838;
        double r26840 = r26839 - r26830;
        return r26840;
}

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 r26841, r26842, r26843, r26844, r26845, r26846, r26847, r26848, r26849, r26850, r26851, r26852, r26853, r26854, r26855, r26856, r26857, r26858, r26859;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(336);
        mpfr_init(r26841);
        mpfr_init(r26842);
        mpfr_init(r26843);
        mpfr_init(r26844);
        mpfr_init(r26845);
        mpfr_init_set_str(r26846, "2", 10, MPFR_RNDN);
        mpfr_init(r26847);
        mpfr_init_set_str(r26848, "4", 10, MPFR_RNDN);
        mpfr_init_set_str(r26849, "1", 10, MPFR_RNDN);
        mpfr_init(r26850);
        mpfr_init(r26851);
        mpfr_init_set_str(r26852, "3", 10, MPFR_RNDN);
        mpfr_init(r26853);
        mpfr_init(r26854);
        mpfr_init(r26855);
        mpfr_init(r26856);
        mpfr_init(r26857);
        mpfr_init(r26858);
        mpfr_init(r26859);
}

double f_im(double a, double b) {
        mpfr_set_d(r26841, a, MPFR_RNDN);
        mpfr_mul(r26842, r26841, r26841, MPFR_RNDN);
        mpfr_set_d(r26843, b, MPFR_RNDN);
        mpfr_mul(r26844, r26843, r26843, MPFR_RNDN);
        mpfr_add(r26845, r26842, r26844, MPFR_RNDN);
        ;
        mpfr_pow(r26847, r26845, r26846, MPFR_RNDN);
        ;
        ;
        mpfr_add(r26850, r26849, r26841, MPFR_RNDN);
        mpfr_mul(r26851, r26842, r26850, MPFR_RNDN);
        ;
        mpfr_mul(r26853, r26852, r26841, MPFR_RNDN);
        mpfr_sub(r26854, r26849, r26853, MPFR_RNDN);
        mpfr_mul(r26855, r26844, r26854, MPFR_RNDN);
        mpfr_add(r26856, r26851, r26855, MPFR_RNDN);
        mpfr_mul(r26857, r26848, r26856, MPFR_RNDN);
        mpfr_add(r26858, r26847, r26857, MPFR_RNDN);
        mpfr_sub(r26859, r26858, r26849, MPFR_RNDN);
        return mpfr_get_d(r26859, MPFR_RNDN);
}

static mpfr_t r26860, r26861, r26862, r26863, r26864, r26865, r26866, r26867, r26868, r26869, r26870, r26871, r26872, r26873, r26874, r26875, r26876, r26877, r26878;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(336);
        mpfr_init(r26860);
        mpfr_init(r26861);
        mpfr_init(r26862);
        mpfr_init(r26863);
        mpfr_init(r26864);
        mpfr_init_set_str(r26865, "2", 10, MPFR_RNDN);
        mpfr_init(r26866);
        mpfr_init_set_str(r26867, "4", 10, MPFR_RNDN);
        mpfr_init_set_str(r26868, "1", 10, MPFR_RNDN);
        mpfr_init(r26869);
        mpfr_init(r26870);
        mpfr_init_set_str(r26871, "3", 10, MPFR_RNDN);
        mpfr_init(r26872);
        mpfr_init(r26873);
        mpfr_init(r26874);
        mpfr_init(r26875);
        mpfr_init(r26876);
        mpfr_init(r26877);
        mpfr_init(r26878);
}

double f_fm(double a, double b) {
        mpfr_set_d(r26860, a, MPFR_RNDN);
        mpfr_mul(r26861, r26860, r26860, MPFR_RNDN);
        mpfr_set_d(r26862, b, MPFR_RNDN);
        mpfr_mul(r26863, r26862, r26862, MPFR_RNDN);
        mpfr_add(r26864, r26861, r26863, MPFR_RNDN);
        ;
        mpfr_pow(r26866, r26864, r26865, MPFR_RNDN);
        ;
        ;
        mpfr_add(r26869, r26868, r26860, MPFR_RNDN);
        mpfr_mul(r26870, r26861, r26869, MPFR_RNDN);
        ;
        mpfr_mul(r26872, r26871, r26860, MPFR_RNDN);
        mpfr_sub(r26873, r26868, r26872, MPFR_RNDN);
        mpfr_mul(r26874, r26863, r26873, MPFR_RNDN);
        mpfr_add(r26875, r26870, r26874, MPFR_RNDN);
        mpfr_mul(r26876, r26867, r26875, MPFR_RNDN);
        mpfr_add(r26877, r26866, r26876, MPFR_RNDN);
        mpfr_sub(r26878, r26877, r26868, MPFR_RNDN);
        return mpfr_get_d(r26878, MPFR_RNDN);
}

static mpfr_t r26879, r26880, r26881, r26882, r26883, r26884, r26885, r26886, r26887, r26888, r26889, r26890, r26891, r26892, r26893, r26894, r26895, r26896, r26897;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(336);
        mpfr_init(r26879);
        mpfr_init(r26880);
        mpfr_init(r26881);
        mpfr_init(r26882);
        mpfr_init(r26883);
        mpfr_init_set_str(r26884, "2", 10, MPFR_RNDN);
        mpfr_init(r26885);
        mpfr_init_set_str(r26886, "4", 10, MPFR_RNDN);
        mpfr_init_set_str(r26887, "1", 10, MPFR_RNDN);
        mpfr_init(r26888);
        mpfr_init(r26889);
        mpfr_init_set_str(r26890, "3", 10, MPFR_RNDN);
        mpfr_init(r26891);
        mpfr_init(r26892);
        mpfr_init(r26893);
        mpfr_init(r26894);
        mpfr_init(r26895);
        mpfr_init(r26896);
        mpfr_init(r26897);
}

double f_dm(double a, double b) {
        mpfr_set_d(r26879, a, MPFR_RNDN);
        mpfr_mul(r26880, r26879, r26879, MPFR_RNDN);
        mpfr_set_d(r26881, b, MPFR_RNDN);
        mpfr_mul(r26882, r26881, r26881, MPFR_RNDN);
        mpfr_add(r26883, r26880, r26882, MPFR_RNDN);
        ;
        mpfr_pow(r26885, r26883, r26884, MPFR_RNDN);
        ;
        ;
        mpfr_add(r26888, r26887, r26879, MPFR_RNDN);
        mpfr_mul(r26889, r26880, r26888, MPFR_RNDN);
        ;
        mpfr_mul(r26891, r26890, r26879, MPFR_RNDN);
        mpfr_sub(r26892, r26887, r26891, MPFR_RNDN);
        mpfr_mul(r26893, r26882, r26892, MPFR_RNDN);
        mpfr_add(r26894, r26889, r26893, MPFR_RNDN);
        mpfr_mul(r26895, r26886, r26894, MPFR_RNDN);
        mpfr_add(r26896, r26885, r26895, MPFR_RNDN);
        mpfr_sub(r26897, r26896, r26887, MPFR_RNDN);
        return mpfr_get_d(r26897, MPFR_RNDN);
}

