#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 r12016 = a;
        float r12017 = r12016 * r12016;
        float r12018 = b;
        float r12019 = r12018 * r12018;
        float r12020 = r12017 + r12019;
        float r12021 = 2;
        float r12022 = pow(r12020, r12021);
        float r12023 = 4;
        float r12024 = 1;
        float r12025 = r12024 + r12016;
        float r12026 = r12017 * r12025;
        float r12027 = 3;
        float r12028 = r12027 * r12016;
        float r12029 = r12024 - r12028;
        float r12030 = r12019 * r12029;
        float r12031 = r12026 + r12030;
        float r12032 = r12023 * r12031;
        float r12033 = r12022 + r12032;
        float r12034 = r12033 - r12024;
        return r12034;
}

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


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

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

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 r12090, r12091, r12092, r12093, r12094, r12095, r12096, r12097, r12098, r12099, r12100, r12101, r12102, r12103, r12104, r12105, r12106, r12107, r12108;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r12090);
        mpfr_init(r12091);
        mpfr_init(r12092);
        mpfr_init(r12093);
        mpfr_init(r12094);
        mpfr_init_set_str(r12095, "2", 10, MPFR_RNDN);
        mpfr_init(r12096);
        mpfr_init_set_str(r12097, "4", 10, MPFR_RNDN);
        mpfr_init_set_str(r12098, "1", 10, MPFR_RNDN);
        mpfr_init(r12099);
        mpfr_init(r12100);
        mpfr_init_set_str(r12101, "3", 10, MPFR_RNDN);
        mpfr_init(r12102);
        mpfr_init(r12103);
        mpfr_init(r12104);
        mpfr_init(r12105);
        mpfr_init(r12106);
        mpfr_init(r12107);
        mpfr_init(r12108);
}

double f_im(double a, double b) {
        mpfr_set_d(r12090, a, MPFR_RNDN);
        mpfr_mul(r12091, r12090, r12090, MPFR_RNDN);
        mpfr_set_d(r12092, b, MPFR_RNDN);
        mpfr_mul(r12093, r12092, r12092, MPFR_RNDN);
        mpfr_add(r12094, r12091, r12093, MPFR_RNDN);
        ;
        mpfr_pow(r12096, r12094, r12095, MPFR_RNDN);
        ;
        ;
        mpfr_add(r12099, r12098, r12090, MPFR_RNDN);
        mpfr_mul(r12100, r12091, r12099, MPFR_RNDN);
        ;
        mpfr_mul(r12102, r12101, r12090, MPFR_RNDN);
        mpfr_sub(r12103, r12098, r12102, MPFR_RNDN);
        mpfr_mul(r12104, r12093, r12103, MPFR_RNDN);
        mpfr_add(r12105, r12100, r12104, MPFR_RNDN);
        mpfr_mul(r12106, r12097, r12105, MPFR_RNDN);
        mpfr_add(r12107, r12096, r12106, MPFR_RNDN);
        mpfr_sub(r12108, r12107, r12098, MPFR_RNDN);
        return mpfr_get_d(r12108, MPFR_RNDN);
}

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_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r12109);
        mpfr_init_set_str(r12110, "4", 10, MPFR_RNDN);
        mpfr_init(r12111);
        mpfr_init(r12112);
        mpfr_init(r12113);
        mpfr_init(r12114);
        mpfr_init_set_str(r12115, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r12116, "3", 10, MPFR_RNDN);
        mpfr_init(r12117);
        mpfr_init(r12118);
        mpfr_init(r12119);
        mpfr_init(r12120);
        mpfr_init(r12121);
        mpfr_init(r12122);
        mpfr_init(r12123);
        mpfr_init(r12124);
        mpfr_init(r12125);
        mpfr_init(r12126);
}

double f_fm(double a, double b) {
        mpfr_set_d(r12109, a, MPFR_RNDN);
        ;
        mpfr_fma(r12111, r12109, r12110, r12110, MPFR_RNDN);
        mpfr_mul(r12112, r12111, r12109, MPFR_RNDN);
        mpfr_set_d(r12113, b, MPFR_RNDN);
        mpfr_hypot(r12114, r12109, r12113, MPFR_RNDN);
        ;
        ;
        mpfr_add(r12117, r12115, r12116, MPFR_RNDN);
        mpfr_pow(r12118, r12114, r12117, MPFR_RNDN);
        mpfr_fma(r12119, r12112, r12109, r12118, MPFR_RNDN);
        mpfr_mul(r12120, r12113, r12113, MPFR_RNDN);
        mpfr_mul(r12121, r12116, r12109, MPFR_RNDN);
        mpfr_sub(r12122, r12115, r12121, MPFR_RNDN);
        mpfr_mul(r12123, r12120, r12122, MPFR_RNDN);
        mpfr_mul(r12124, r12110, r12123, MPFR_RNDN);
        mpfr_add(r12125, r12119, r12124, MPFR_RNDN);
        mpfr_sub(r12126, r12125, r12115, 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_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r12127);
        mpfr_init_set_str(r12128, "4", 10, MPFR_RNDN);
        mpfr_init(r12129);
        mpfr_init(r12130);
        mpfr_init(r12131);
        mpfr_init(r12132);
        mpfr_init_set_str(r12133, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r12134, "3", 10, MPFR_RNDN);
        mpfr_init(r12135);
        mpfr_init(r12136);
        mpfr_init(r12137);
        mpfr_init(r12138);
        mpfr_init(r12139);
        mpfr_init(r12140);
        mpfr_init(r12141);
        mpfr_init(r12142);
        mpfr_init(r12143);
        mpfr_init(r12144);
}

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

