#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 r8006 = 3;
        float r8007 = 2;
        float r8008 = r;
        float r8009 = r8008 * r8008;
        float r8010 = r8007 / r8009;
        float r8011 = r8006 + r8010;
        float r8012 = 0.125;
        float r8013 = v;
        float r8014 = r8007 * r8013;
        float r8015 = r8006 - r8014;
        float r8016 = r8012 * r8015;
        float r8017 = w;
        float r8018 = r8017 * r8017;
        float r8019 = r8018 * r8008;
        float r8020 = r8019 * r8008;
        float r8021 = r8016 * r8020;
        float r8022 = 1;
        float r8023 = r8022 - r8013;
        float r8024 = r8021 / r8023;
        float r8025 = r8011 - r8024;
        float r8026 = 4.5;
        float r8027 = r8025 - r8026;
        return r8027;
}

double f_id(double v, double w, double r) {
        double r8028 = 3;
        double r8029 = 2;
        double r8030 = r;
        double r8031 = r8030 * r8030;
        double r8032 = r8029 / r8031;
        double r8033 = r8028 + r8032;
        double r8034 = 0.125;
        double r8035 = v;
        double r8036 = r8029 * r8035;
        double r8037 = r8028 - r8036;
        double r8038 = r8034 * r8037;
        double r8039 = w;
        double r8040 = r8039 * r8039;
        double r8041 = r8040 * r8030;
        double r8042 = r8041 * r8030;
        double r8043 = r8038 * r8042;
        double r8044 = 1;
        double r8045 = r8044 - r8035;
        double r8046 = r8043 / r8045;
        double r8047 = r8033 - r8046;
        double r8048 = 4.5;
        double r8049 = r8047 - r8048;
        return r8049;
}


double f_of(float v, float w, float r) {
        float r8050 = 3;
        float r8051 = v;
        float r8052 = 2;
        float r8053 = r8051 * r8052;
        float r8054 = r8050 - r8053;
        float r8055 = 1;
        float r8056 = r8055 - r8051;
        float r8057 = 0.125;
        float r8058 = r8056 / r8057;
        float r8059 = r8054 / r8058;
        float r8060 = w;
        float r8061 = r;
        float r8062 = r8060 * r8061;
        float r8063 = r8062 * r8062;
        float r8064 = -r8063;
        float r8065 = 4.5;
        float r8066 = -r8065;
        float r8067 = r8066 + r8050;
        float r8068 = r8061 * r8061;
        float r8069 = r8052 / r8068;
        float r8070 = r8067 + r8069;
        float r8071 = fma(r8059, r8064, r8070);
        float r8072 = 0;
        float r8073 = r8071 + r8072;
        return r8073;
}

double f_od(double v, double w, double r) {
        double r8074 = 3;
        double r8075 = v;
        double r8076 = 2;
        double r8077 = r8075 * r8076;
        double r8078 = r8074 - r8077;
        double r8079 = 1;
        double r8080 = r8079 - r8075;
        double r8081 = 0.125;
        double r8082 = r8080 / r8081;
        double r8083 = r8078 / r8082;
        double r8084 = w;
        double r8085 = r;
        double r8086 = r8084 * r8085;
        double r8087 = r8086 * r8086;
        double r8088 = -r8087;
        double r8089 = 4.5;
        double r8090 = -r8089;
        double r8091 = r8090 + r8074;
        double r8092 = r8085 * r8085;
        double r8093 = r8076 / r8092;
        double r8094 = r8091 + r8093;
        double r8095 = fma(r8083, r8088, r8094);
        double r8096 = 0;
        double r8097 = r8095 + r8096;
        return r8097;
}

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 r8098, r8099, r8100, r8101, r8102, r8103, r8104, r8105, r8106, r8107, r8108, r8109, r8110, r8111, r8112, r8113, r8114, r8115, r8116, r8117, r8118, r8119;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init_set_str(r8098, "3", 10, MPFR_RNDN);
        mpfr_init_set_str(r8099, "2", 10, MPFR_RNDN);
        mpfr_init(r8100);
        mpfr_init(r8101);
        mpfr_init(r8102);
        mpfr_init(r8103);
        mpfr_init_set_str(r8104, "0.125", 10, MPFR_RNDN);
        mpfr_init(r8105);
        mpfr_init(r8106);
        mpfr_init(r8107);
        mpfr_init(r8108);
        mpfr_init(r8109);
        mpfr_init(r8110);
        mpfr_init(r8111);
        mpfr_init(r8112);
        mpfr_init(r8113);
        mpfr_init_set_str(r8114, "1", 10, MPFR_RNDN);
        mpfr_init(r8115);
        mpfr_init(r8116);
        mpfr_init(r8117);
        mpfr_init_set_str(r8118, "4.5", 10, MPFR_RNDN);
        mpfr_init(r8119);
}

double f_im(double v, double w, double r) {
        ;
        ;
        mpfr_set_d(r8100, r, MPFR_RNDN);
        mpfr_mul(r8101, r8100, r8100, MPFR_RNDN);
        mpfr_div(r8102, r8099, r8101, MPFR_RNDN);
        mpfr_add(r8103, r8098, r8102, MPFR_RNDN);
        ;
        mpfr_set_d(r8105, v, MPFR_RNDN);
        mpfr_mul(r8106, r8099, r8105, MPFR_RNDN);
        mpfr_sub(r8107, r8098, r8106, MPFR_RNDN);
        mpfr_mul(r8108, r8104, r8107, MPFR_RNDN);
        mpfr_set_d(r8109, w, MPFR_RNDN);
        mpfr_mul(r8110, r8109, r8109, MPFR_RNDN);
        mpfr_mul(r8111, r8110, r8100, MPFR_RNDN);
        mpfr_mul(r8112, r8111, r8100, MPFR_RNDN);
        mpfr_mul(r8113, r8108, r8112, MPFR_RNDN);
        ;
        mpfr_sub(r8115, r8114, r8105, MPFR_RNDN);
        mpfr_div(r8116, r8113, r8115, MPFR_RNDN);
        mpfr_sub(r8117, r8103, r8116, MPFR_RNDN);
        ;
        mpfr_sub(r8119, r8117, r8118, MPFR_RNDN);
        return mpfr_get_d(r8119, MPFR_RNDN);
}

static mpfr_t r8120, r8121, r8122, r8123, r8124, r8125, r8126, r8127, r8128, r8129, r8130, r8131, r8132, r8133, r8134, r8135, r8136, r8137, r8138, r8139, r8140, r8141, r8142, r8143;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init_set_str(r8120, "3", 10, MPFR_RNDN);
        mpfr_init(r8121);
        mpfr_init_set_str(r8122, "2", 10, MPFR_RNDN);
        mpfr_init(r8123);
        mpfr_init(r8124);
        mpfr_init_set_str(r8125, "1", 10, MPFR_RNDN);
        mpfr_init(r8126);
        mpfr_init_set_str(r8127, "0.125", 10, MPFR_RNDN);
        mpfr_init(r8128);
        mpfr_init(r8129);
        mpfr_init(r8130);
        mpfr_init(r8131);
        mpfr_init(r8132);
        mpfr_init(r8133);
        mpfr_init(r8134);
        mpfr_init_set_str(r8135, "4.5", 10, MPFR_RNDN);
        mpfr_init(r8136);
        mpfr_init(r8137);
        mpfr_init(r8138);
        mpfr_init(r8139);
        mpfr_init(r8140);
        mpfr_init(r8141);
        mpfr_init_set_str(r8142, "0", 10, MPFR_RNDN);
        mpfr_init(r8143);
}

double f_fm(double v, double w, double r) {
        ;
        mpfr_set_d(r8121, v, MPFR_RNDN);
        ;
        mpfr_mul(r8123, r8121, r8122, MPFR_RNDN);
        mpfr_sub(r8124, r8120, r8123, MPFR_RNDN);
        ;
        mpfr_sub(r8126, r8125, r8121, MPFR_RNDN);
        ;
        mpfr_div(r8128, r8126, r8127, MPFR_RNDN);
        mpfr_div(r8129, r8124, r8128, MPFR_RNDN);
        mpfr_set_d(r8130, w, MPFR_RNDN);
        mpfr_set_d(r8131, r, MPFR_RNDN);
        mpfr_mul(r8132, r8130, r8131, MPFR_RNDN);
        mpfr_mul(r8133, r8132, r8132, MPFR_RNDN);
        mpfr_neg(r8134, r8133, MPFR_RNDN);
        ;
        mpfr_neg(r8136, r8135, MPFR_RNDN);
        mpfr_add(r8137, r8136, r8120, MPFR_RNDN);
        mpfr_mul(r8138, r8131, r8131, MPFR_RNDN);
        mpfr_div(r8139, r8122, r8138, MPFR_RNDN);
        mpfr_add(r8140, r8137, r8139, MPFR_RNDN);
        mpfr_fma(r8141, r8129, r8134, r8140, MPFR_RNDN);
        ;
        mpfr_add(r8143, r8141, r8142, MPFR_RNDN);
        return mpfr_get_d(r8143, MPFR_RNDN);
}

static mpfr_t r8144, r8145, r8146, r8147, r8148, r8149, r8150, r8151, r8152, r8153, r8154, r8155, r8156, r8157, r8158, r8159, r8160, r8161, r8162, r8163, r8164, r8165, r8166, r8167;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init_set_str(r8144, "3", 10, MPFR_RNDN);
        mpfr_init(r8145);
        mpfr_init_set_str(r8146, "2", 10, MPFR_RNDN);
        mpfr_init(r8147);
        mpfr_init(r8148);
        mpfr_init_set_str(r8149, "1", 10, MPFR_RNDN);
        mpfr_init(r8150);
        mpfr_init_set_str(r8151, "0.125", 10, MPFR_RNDN);
        mpfr_init(r8152);
        mpfr_init(r8153);
        mpfr_init(r8154);
        mpfr_init(r8155);
        mpfr_init(r8156);
        mpfr_init(r8157);
        mpfr_init(r8158);
        mpfr_init_set_str(r8159, "4.5", 10, MPFR_RNDN);
        mpfr_init(r8160);
        mpfr_init(r8161);
        mpfr_init(r8162);
        mpfr_init(r8163);
        mpfr_init(r8164);
        mpfr_init(r8165);
        mpfr_init_set_str(r8166, "0", 10, MPFR_RNDN);
        mpfr_init(r8167);
}

double f_dm(double v, double w, double r) {
        ;
        mpfr_set_d(r8145, v, MPFR_RNDN);
        ;
        mpfr_mul(r8147, r8145, r8146, MPFR_RNDN);
        mpfr_sub(r8148, r8144, r8147, MPFR_RNDN);
        ;
        mpfr_sub(r8150, r8149, r8145, MPFR_RNDN);
        ;
        mpfr_div(r8152, r8150, r8151, MPFR_RNDN);
        mpfr_div(r8153, r8148, r8152, MPFR_RNDN);
        mpfr_set_d(r8154, w, MPFR_RNDN);
        mpfr_set_d(r8155, r, MPFR_RNDN);
        mpfr_mul(r8156, r8154, r8155, MPFR_RNDN);
        mpfr_mul(r8157, r8156, r8156, MPFR_RNDN);
        mpfr_neg(r8158, r8157, MPFR_RNDN);
        ;
        mpfr_neg(r8160, r8159, MPFR_RNDN);
        mpfr_add(r8161, r8160, r8144, MPFR_RNDN);
        mpfr_mul(r8162, r8155, r8155, MPFR_RNDN);
        mpfr_div(r8163, r8146, r8162, MPFR_RNDN);
        mpfr_add(r8164, r8161, r8163, MPFR_RNDN);
        mpfr_fma(r8165, r8153, r8158, r8164, MPFR_RNDN);
        ;
        mpfr_add(r8167, r8165, r8166, MPFR_RNDN);
        return mpfr_get_d(r8167, MPFR_RNDN);
}

