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

char *name = "Rosa's TurbineBenchmark";

double f_if(float v, float w, float r) {
        float r23944 = 3;
        float r23945 = 2;
        float r23946 = r;
        float r23947 = r23946 * r23946;
        float r23948 = r23945 / r23947;
        float r23949 = r23944 + r23948;
        float r23950 = 0.125;
        float r23951 = v;
        float r23952 = r23945 * r23951;
        float r23953 = r23944 - r23952;
        float r23954 = r23950 * r23953;
        float r23955 = w;
        float r23956 = r23955 * r23955;
        float r23957 = r23956 * r23946;
        float r23958 = r23957 * r23946;
        float r23959 = r23954 * r23958;
        float r23960 = 1;
        float r23961 = r23960 - r23951;
        float r23962 = r23959 / r23961;
        float r23963 = r23949 - r23962;
        float r23964 = 4.5;
        float r23965 = r23963 - r23964;
        return r23965;
}

double f_id(double v, double w, double r) {
        double r23966 = 3;
        double r23967 = 2;
        double r23968 = r;
        double r23969 = r23968 * r23968;
        double r23970 = r23967 / r23969;
        double r23971 = r23966 + r23970;
        double r23972 = 0.125;
        double r23973 = v;
        double r23974 = r23967 * r23973;
        double r23975 = r23966 - r23974;
        double r23976 = r23972 * r23975;
        double r23977 = w;
        double r23978 = r23977 * r23977;
        double r23979 = r23978 * r23968;
        double r23980 = r23979 * r23968;
        double r23981 = r23976 * r23980;
        double r23982 = 1;
        double r23983 = r23982 - r23973;
        double r23984 = r23981 / r23983;
        double r23985 = r23971 - r23984;
        double r23986 = 4.5;
        double r23987 = r23985 - r23986;
        return r23987;
}


double f_of(float v, float w, float r) {
        float r23988 = 3;
        float r23989 = v;
        float r23990 = 2;
        float r23991 = r23989 * r23990;
        float r23992 = r23988 - r23991;
        float r23993 = 1;
        float r23994 = r23993 - r23989;
        float r23995 = 0.125;
        float r23996 = r23994 / r23995;
        float r23997 = r23992 / r23996;
        float r23998 = log1p(r23997);
        float r23999 = expm1(r23998);
        float r24000 = r;
        float r24001 = w;
        float r24002 = r24000 * r24001;
        float r24003 = r24002 * r24002;
        float r24004 = -r24003;
        float r24005 = 4.5;
        float r24006 = -r24005;
        float r24007 = r24006 + r23988;
        float r24008 = r24000 * r24000;
        float r24009 = r23990 / r24008;
        float r24010 = r24007 + r24009;
        float r24011 = fma(r23999, r24004, r24010);
        float r24012 = 0;
        float r24013 = r24011 + r24012;
        return r24013;
}

double f_od(double v, double w, double r) {
        double r24014 = 3;
        double r24015 = v;
        double r24016 = 2;
        double r24017 = r24015 * r24016;
        double r24018 = r24014 - r24017;
        double r24019 = 1;
        double r24020 = r24019 - r24015;
        double r24021 = 0.125;
        double r24022 = r24020 / r24021;
        double r24023 = r24018 / r24022;
        double r24024 = log1p(r24023);
        double r24025 = expm1(r24024);
        double r24026 = r;
        double r24027 = w;
        double r24028 = r24026 * r24027;
        double r24029 = r24028 * r24028;
        double r24030 = -r24029;
        double r24031 = 4.5;
        double r24032 = -r24031;
        double r24033 = r24032 + r24014;
        double r24034 = r24026 * r24026;
        double r24035 = r24016 / r24034;
        double r24036 = r24033 + r24035;
        double r24037 = fma(r24025, r24030, r24036);
        double r24038 = 0;
        double r24039 = r24037 + r24038;
        return r24039;
}

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 r24040, r24041, r24042, r24043, r24044, r24045, r24046, r24047, r24048, r24049, r24050, r24051, r24052, r24053, r24054, r24055, r24056, r24057, r24058, r24059, r24060, r24061;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init_set_str(r24040, "3", 10, MPFR_RNDN);
        mpfr_init_set_str(r24041, "2", 10, MPFR_RNDN);
        mpfr_init(r24042);
        mpfr_init(r24043);
        mpfr_init(r24044);
        mpfr_init(r24045);
        mpfr_init_set_str(r24046, "0.125", 10, MPFR_RNDN);
        mpfr_init(r24047);
        mpfr_init(r24048);
        mpfr_init(r24049);
        mpfr_init(r24050);
        mpfr_init(r24051);
        mpfr_init(r24052);
        mpfr_init(r24053);
        mpfr_init(r24054);
        mpfr_init(r24055);
        mpfr_init_set_str(r24056, "1", 10, MPFR_RNDN);
        mpfr_init(r24057);
        mpfr_init(r24058);
        mpfr_init(r24059);
        mpfr_init_set_str(r24060, "4.5", 10, MPFR_RNDN);
        mpfr_init(r24061);
}

double f_im(double v, double w, double r) {
        ;
        ;
        mpfr_set_d(r24042, r, MPFR_RNDN);
        mpfr_mul(r24043, r24042, r24042, MPFR_RNDN);
        mpfr_div(r24044, r24041, r24043, MPFR_RNDN);
        mpfr_add(r24045, r24040, r24044, MPFR_RNDN);
        ;
        mpfr_set_d(r24047, v, MPFR_RNDN);
        mpfr_mul(r24048, r24041, r24047, MPFR_RNDN);
        mpfr_sub(r24049, r24040, r24048, MPFR_RNDN);
        mpfr_mul(r24050, r24046, r24049, MPFR_RNDN);
        mpfr_set_d(r24051, w, MPFR_RNDN);
        mpfr_mul(r24052, r24051, r24051, MPFR_RNDN);
        mpfr_mul(r24053, r24052, r24042, MPFR_RNDN);
        mpfr_mul(r24054, r24053, r24042, MPFR_RNDN);
        mpfr_mul(r24055, r24050, r24054, MPFR_RNDN);
        ;
        mpfr_sub(r24057, r24056, r24047, MPFR_RNDN);
        mpfr_div(r24058, r24055, r24057, MPFR_RNDN);
        mpfr_sub(r24059, r24045, r24058, MPFR_RNDN);
        ;
        mpfr_sub(r24061, r24059, r24060, MPFR_RNDN);
        return mpfr_get_d(r24061, MPFR_RNDN);
}

static mpfr_t r24062, r24063, r24064, r24065, r24066, r24067, r24068, r24069, r24070, r24071, r24072, r24073, r24074, r24075, r24076, r24077, r24078, r24079, r24080, r24081, r24082, r24083, r24084, r24085, r24086, r24087;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init_set_str(r24062, "3", 10, MPFR_RNDN);
        mpfr_init(r24063);
        mpfr_init_set_str(r24064, "2", 10, MPFR_RNDN);
        mpfr_init(r24065);
        mpfr_init(r24066);
        mpfr_init_set_str(r24067, "1", 10, MPFR_RNDN);
        mpfr_init(r24068);
        mpfr_init_set_str(r24069, "0.125", 10, MPFR_RNDN);
        mpfr_init(r24070);
        mpfr_init(r24071);
        mpfr_init(r24072);
        mpfr_init(r24073);
        mpfr_init(r24074);
        mpfr_init(r24075);
        mpfr_init(r24076);
        mpfr_init(r24077);
        mpfr_init(r24078);
        mpfr_init_set_str(r24079, "4.5", 10, MPFR_RNDN);
        mpfr_init(r24080);
        mpfr_init(r24081);
        mpfr_init(r24082);
        mpfr_init(r24083);
        mpfr_init(r24084);
        mpfr_init(r24085);
        mpfr_init_set_str(r24086, "0", 10, MPFR_RNDN);
        mpfr_init(r24087);
}

double f_fm(double v, double w, double r) {
        ;
        mpfr_set_d(r24063, v, MPFR_RNDN);
        ;
        mpfr_mul(r24065, r24063, r24064, MPFR_RNDN);
        mpfr_sub(r24066, r24062, r24065, MPFR_RNDN);
        ;
        mpfr_sub(r24068, r24067, r24063, MPFR_RNDN);
        ;
        mpfr_div(r24070, r24068, r24069, MPFR_RNDN);
        mpfr_div(r24071, r24066, r24070, MPFR_RNDN);
        mpfr_log1p(r24072, r24071, MPFR_RNDN);
        mpfr_expm1(r24073, r24072, MPFR_RNDN);
        mpfr_set_d(r24074, r, MPFR_RNDN);
        mpfr_set_d(r24075, w, MPFR_RNDN);
        mpfr_mul(r24076, r24074, r24075, MPFR_RNDN);
        mpfr_mul(r24077, r24076, r24076, MPFR_RNDN);
        mpfr_neg(r24078, r24077, MPFR_RNDN);
        ;
        mpfr_neg(r24080, r24079, MPFR_RNDN);
        mpfr_add(r24081, r24080, r24062, MPFR_RNDN);
        mpfr_mul(r24082, r24074, r24074, MPFR_RNDN);
        mpfr_div(r24083, r24064, r24082, MPFR_RNDN);
        mpfr_add(r24084, r24081, r24083, MPFR_RNDN);
        mpfr_fma(r24085, r24073, r24078, r24084, MPFR_RNDN);
        ;
        mpfr_add(r24087, r24085, r24086, MPFR_RNDN);
        return mpfr_get_d(r24087, MPFR_RNDN);
}

static mpfr_t r24088, r24089, r24090, r24091, r24092, r24093, r24094, r24095, r24096, r24097, r24098, r24099, r24100, r24101, r24102, r24103, r24104, r24105, r24106, r24107, r24108, r24109, r24110, r24111, r24112, r24113;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init_set_str(r24088, "3", 10, MPFR_RNDN);
        mpfr_init(r24089);
        mpfr_init_set_str(r24090, "2", 10, MPFR_RNDN);
        mpfr_init(r24091);
        mpfr_init(r24092);
        mpfr_init_set_str(r24093, "1", 10, MPFR_RNDN);
        mpfr_init(r24094);
        mpfr_init_set_str(r24095, "0.125", 10, MPFR_RNDN);
        mpfr_init(r24096);
        mpfr_init(r24097);
        mpfr_init(r24098);
        mpfr_init(r24099);
        mpfr_init(r24100);
        mpfr_init(r24101);
        mpfr_init(r24102);
        mpfr_init(r24103);
        mpfr_init(r24104);
        mpfr_init_set_str(r24105, "4.5", 10, MPFR_RNDN);
        mpfr_init(r24106);
        mpfr_init(r24107);
        mpfr_init(r24108);
        mpfr_init(r24109);
        mpfr_init(r24110);
        mpfr_init(r24111);
        mpfr_init_set_str(r24112, "0", 10, MPFR_RNDN);
        mpfr_init(r24113);
}

double f_dm(double v, double w, double r) {
        ;
        mpfr_set_d(r24089, v, MPFR_RNDN);
        ;
        mpfr_mul(r24091, r24089, r24090, MPFR_RNDN);
        mpfr_sub(r24092, r24088, r24091, MPFR_RNDN);
        ;
        mpfr_sub(r24094, r24093, r24089, MPFR_RNDN);
        ;
        mpfr_div(r24096, r24094, r24095, MPFR_RNDN);
        mpfr_div(r24097, r24092, r24096, MPFR_RNDN);
        mpfr_log1p(r24098, r24097, MPFR_RNDN);
        mpfr_expm1(r24099, r24098, MPFR_RNDN);
        mpfr_set_d(r24100, r, MPFR_RNDN);
        mpfr_set_d(r24101, w, MPFR_RNDN);
        mpfr_mul(r24102, r24100, r24101, MPFR_RNDN);
        mpfr_mul(r24103, r24102, r24102, MPFR_RNDN);
        mpfr_neg(r24104, r24103, MPFR_RNDN);
        ;
        mpfr_neg(r24106, r24105, MPFR_RNDN);
        mpfr_add(r24107, r24106, r24088, MPFR_RNDN);
        mpfr_mul(r24108, r24100, r24100, MPFR_RNDN);
        mpfr_div(r24109, r24090, r24108, MPFR_RNDN);
        mpfr_add(r24110, r24107, r24109, MPFR_RNDN);
        mpfr_fma(r24111, r24099, r24104, r24110, MPFR_RNDN);
        ;
        mpfr_add(r24113, r24111, r24112, MPFR_RNDN);
        return mpfr_get_d(r24113, MPFR_RNDN);
}

