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

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

double f_if(float a, float b) {
        float r12037 = a;
        float r12038 = r12037 * r12037;
        float r12039 = b;
        float r12040 = r12039 * r12039;
        float r12041 = r12038 + r12040;
        float r12042 = 2;
        float r12043 = pow(r12041, r12042);
        float r12044 = 4;
        float r12045 = 1;
        float r12046 = r12045 - r12037;
        float r12047 = r12038 * r12046;
        float r12048 = 3;
        float r12049 = r12048 + r12037;
        float r12050 = r12040 * r12049;
        float r12051 = r12047 + r12050;
        float r12052 = r12044 * r12051;
        float r12053 = r12043 + r12052;
        float r12054 = r12053 - r12045;
        return r12054;
}

double f_id(double a, double b) {
        double r12055 = a;
        double r12056 = r12055 * r12055;
        double r12057 = b;
        double r12058 = r12057 * r12057;
        double r12059 = r12056 + r12058;
        double r12060 = 2;
        double r12061 = pow(r12059, r12060);
        double r12062 = 4;
        double r12063 = 1;
        double r12064 = r12063 - r12055;
        double r12065 = r12056 * r12064;
        double r12066 = 3;
        double r12067 = r12066 + r12055;
        double r12068 = r12058 * r12067;
        double r12069 = r12065 + r12068;
        double r12070 = r12062 * r12069;
        double r12071 = r12061 + r12070;
        double r12072 = r12071 - r12063;
        return r12072;
}


double f_of(float a, float b) {
        float r12073 = a;
        float r12074 = r12073 * r12073;
        float r12075 = b;
        float r12076 = r12075 * r12075;
        float r12077 = r12074 + r12076;
        float r12078 = 2;
        float r12079 = pow(r12077, r12078);
        float r12080 = 4;
        float r12081 = 1;
        float r12082 = r12081 - r12073;
        float r12083 = r12074 * r12082;
        float r12084 = 3;
        float r12085 = r12084 + r12073;
        float r12086 = r12076 * r12085;
        float r12087 = r12083 + r12086;
        float r12088 = r12080 * r12087;
        float r12089 = r12079 + r12088;
        float r12090 = r12089 - r12081;
        return r12090;
}

double f_od(double a, double b) {
        double r12091 = a;
        double r12092 = r12091 * r12091;
        double r12093 = b;
        double r12094 = r12093 * r12093;
        double r12095 = r12092 + r12094;
        double r12096 = 2;
        double r12097 = pow(r12095, r12096);
        double r12098 = 4;
        double r12099 = 1;
        double r12100 = r12099 - r12091;
        double r12101 = r12092 * r12100;
        double r12102 = 3;
        double r12103 = r12102 + r12091;
        double r12104 = r12094 * r12103;
        double r12105 = r12101 + r12104;
        double r12106 = r12098 * r12105;
        double r12107 = r12097 + r12106;
        double r12108 = r12107 - r12099;
        return r12108;
}

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 r12109, r12110, r12111, r12112, r12113, r12114, r12115, r12116, r12117, r12118, r12119, r12120, r12121, r12122, r12123, r12124, r12125, r12126;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r12109);
        mpfr_init(r12110);
        mpfr_init(r12111);
        mpfr_init(r12112);
        mpfr_init(r12113);
        mpfr_init_set_str(r12114, "2", 10, MPFR_RNDN);
        mpfr_init(r12115);
        mpfr_init_set_str(r12116, "4", 10, MPFR_RNDN);
        mpfr_init_set_str(r12117, "1", 10, MPFR_RNDN);
        mpfr_init(r12118);
        mpfr_init(r12119);
        mpfr_init_set_str(r12120, "3", 10, MPFR_RNDN);
        mpfr_init(r12121);
        mpfr_init(r12122);
        mpfr_init(r12123);
        mpfr_init(r12124);
        mpfr_init(r12125);
        mpfr_init(r12126);
}

double f_im(double a, double b) {
        mpfr_set_d(r12109, a, MPFR_RNDN);
        mpfr_mul(r12110, r12109, r12109, MPFR_RNDN);
        mpfr_set_d(r12111, b, MPFR_RNDN);
        mpfr_mul(r12112, r12111, r12111, MPFR_RNDN);
        mpfr_add(r12113, r12110, r12112, MPFR_RNDN);
        ;
        mpfr_pow(r12115, r12113, r12114, MPFR_RNDN);
        ;
        ;
        mpfr_sub(r12118, r12117, r12109, MPFR_RNDN);
        mpfr_mul(r12119, r12110, r12118, MPFR_RNDN);
        ;
        mpfr_add(r12121, r12120, r12109, MPFR_RNDN);
        mpfr_mul(r12122, r12112, r12121, MPFR_RNDN);
        mpfr_add(r12123, r12119, r12122, MPFR_RNDN);
        mpfr_mul(r12124, r12116, r12123, MPFR_RNDN);
        mpfr_add(r12125, r12115, r12124, MPFR_RNDN);
        mpfr_sub(r12126, r12125, r12117, MPFR_RNDN);
        return mpfr_get_d(r12126, MPFR_RNDN);
}

static mpfr_t r12127, r12128, r12129, r12130, r12131, r12132, r12133, r12134, r12135, r12136, r12137, r12138, r12139, r12140, r12141, r12142, r12143, r12144;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r12127);
        mpfr_init(r12128);
        mpfr_init(r12129);
        mpfr_init(r12130);
        mpfr_init(r12131);
        mpfr_init_set_str(r12132, "2", 10, MPFR_RNDN);
        mpfr_init(r12133);
        mpfr_init_set_str(r12134, "4", 10, MPFR_RNDN);
        mpfr_init_set_str(r12135, "1", 10, MPFR_RNDN);
        mpfr_init(r12136);
        mpfr_init(r12137);
        mpfr_init_set_str(r12138, "3", 10, MPFR_RNDN);
        mpfr_init(r12139);
        mpfr_init(r12140);
        mpfr_init(r12141);
        mpfr_init(r12142);
        mpfr_init(r12143);
        mpfr_init(r12144);
}

double f_fm(double a, double b) {
        mpfr_set_d(r12127, a, MPFR_RNDN);
        mpfr_mul(r12128, r12127, r12127, MPFR_RNDN);
        mpfr_set_d(r12129, b, MPFR_RNDN);
        mpfr_mul(r12130, r12129, r12129, MPFR_RNDN);
        mpfr_add(r12131, r12128, r12130, MPFR_RNDN);
        ;
        mpfr_pow(r12133, r12131, r12132, MPFR_RNDN);
        ;
        ;
        mpfr_sub(r12136, r12135, r12127, MPFR_RNDN);
        mpfr_mul(r12137, r12128, r12136, MPFR_RNDN);
        ;
        mpfr_add(r12139, r12138, r12127, MPFR_RNDN);
        mpfr_mul(r12140, r12130, r12139, MPFR_RNDN);
        mpfr_add(r12141, r12137, r12140, MPFR_RNDN);
        mpfr_mul(r12142, r12134, r12141, MPFR_RNDN);
        mpfr_add(r12143, r12133, r12142, MPFR_RNDN);
        mpfr_sub(r12144, r12143, r12135, MPFR_RNDN);
        return mpfr_get_d(r12144, MPFR_RNDN);
}

static mpfr_t r12145, r12146, r12147, r12148, r12149, r12150, r12151, r12152, r12153, r12154, r12155, r12156, r12157, r12158, r12159, r12160, r12161, r12162;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r12145);
        mpfr_init(r12146);
        mpfr_init(r12147);
        mpfr_init(r12148);
        mpfr_init(r12149);
        mpfr_init_set_str(r12150, "2", 10, MPFR_RNDN);
        mpfr_init(r12151);
        mpfr_init_set_str(r12152, "4", 10, MPFR_RNDN);
        mpfr_init_set_str(r12153, "1", 10, MPFR_RNDN);
        mpfr_init(r12154);
        mpfr_init(r12155);
        mpfr_init_set_str(r12156, "3", 10, MPFR_RNDN);
        mpfr_init(r12157);
        mpfr_init(r12158);
        mpfr_init(r12159);
        mpfr_init(r12160);
        mpfr_init(r12161);
        mpfr_init(r12162);
}

double f_dm(double a, double b) {
        mpfr_set_d(r12145, a, MPFR_RNDN);
        mpfr_mul(r12146, r12145, r12145, MPFR_RNDN);
        mpfr_set_d(r12147, b, MPFR_RNDN);
        mpfr_mul(r12148, r12147, r12147, MPFR_RNDN);
        mpfr_add(r12149, r12146, r12148, MPFR_RNDN);
        ;
        mpfr_pow(r12151, r12149, r12150, MPFR_RNDN);
        ;
        ;
        mpfr_sub(r12154, r12153, r12145, MPFR_RNDN);
        mpfr_mul(r12155, r12146, r12154, MPFR_RNDN);
        ;
        mpfr_add(r12157, r12156, r12145, MPFR_RNDN);
        mpfr_mul(r12158, r12148, r12157, MPFR_RNDN);
        mpfr_add(r12159, r12155, r12158, MPFR_RNDN);
        mpfr_mul(r12160, r12152, r12159, MPFR_RNDN);
        mpfr_add(r12161, r12151, r12160, MPFR_RNDN);
        mpfr_sub(r12162, r12161, r12153, MPFR_RNDN);
        return mpfr_get_d(r12162, MPFR_RNDN);
}

