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

char *name = "Cubic critical, narrow range";

double f_if(float a, float b, float c, float __attribute__((unused)) d) {
        float r18362126 = b;
        float r18362127 = -r18362126;
        float r18362128 = r18362126 * r18362126;
        float r18362129 = 3;
        float r18362130 = a;
        float r18362131 = r18362129 * r18362130;
        float r18362132 = c;
        float r18362133 = r18362131 * r18362132;
        float r18362134 = r18362128 - r18362133;
        float r18362135 = sqrt(r18362134);
        float r18362136 = r18362127 + r18362135;
        float r18362137 = r18362136 / r18362131;
        return r18362137;
}

double f_id(double a, double b, double c, double __attribute__((unused)) d) {
        double r18362138 = b;
        double r18362139 = -r18362138;
        double r18362140 = r18362138 * r18362138;
        double r18362141 = 3;
        double r18362142 = a;
        double r18362143 = r18362141 * r18362142;
        double r18362144 = c;
        double r18362145 = r18362143 * r18362144;
        double r18362146 = r18362140 - r18362145;
        double r18362147 = sqrt(r18362146);
        double r18362148 = r18362139 + r18362147;
        double r18362149 = r18362148 / r18362143;
        return r18362149;
}


double f_of(float a, float b, float c, float __attribute__((unused)) d) {
        float r18362150 = 1;
        float r18362151 = b;
        float r18362152 = -r18362151;
        float r18362153 = r18362151 * r18362151;
        float r18362154 = c;
        float r18362155 = 3;
        float r18362156 = r18362154 * r18362155;
        float r18362157 = a;
        float r18362158 = r18362156 * r18362157;
        float r18362159 = r18362153 - r18362158;
        float r18362160 = sqrt(r18362159);
        float r18362161 = r18362152 - r18362160;
        float r18362162 = r18362161 / r18362154;
        float r18362163 = r18362150 / r18362162;
        return r18362163;
}

double f_od(double a, double b, double c, double __attribute__((unused)) d) {
        double r18362164 = 1;
        double r18362165 = b;
        double r18362166 = -r18362165;
        double r18362167 = r18362165 * r18362165;
        double r18362168 = c;
        double r18362169 = 3;
        double r18362170 = r18362168 * r18362169;
        double r18362171 = a;
        double r18362172 = r18362170 * r18362171;
        double r18362173 = r18362167 - r18362172;
        double r18362174 = sqrt(r18362173);
        double r18362175 = r18362166 - r18362174;
        double r18362176 = r18362175 / r18362168;
        double r18362177 = r18362164 / r18362176;
        return r18362177;
}

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 r18362178, r18362179, r18362180, r18362181, r18362182, r18362183, r18362184, r18362185, r18362186, r18362187, r18362188, r18362189;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(656);
        mpfr_init(r18362178);
        mpfr_init(r18362179);
        mpfr_init(r18362180);
        mpfr_init_set_str(r18362181, "3", 10, MPFR_RNDN);
        mpfr_init(r18362182);
        mpfr_init(r18362183);
        mpfr_init(r18362184);
        mpfr_init(r18362185);
        mpfr_init(r18362186);
        mpfr_init(r18362187);
        mpfr_init(r18362188);
        mpfr_init(r18362189);
}

double f_im(double a, double b, double c, double __attribute__((unused)) d) {
        mpfr_set_d(r18362178, b, MPFR_RNDN);
        mpfr_neg(r18362179, r18362178, MPFR_RNDN);
        mpfr_mul(r18362180, r18362178, r18362178, MPFR_RNDN);
        ;
        mpfr_set_d(r18362182, a, MPFR_RNDN);
        mpfr_mul(r18362183, r18362181, r18362182, MPFR_RNDN);
        mpfr_set_d(r18362184, c, MPFR_RNDN);
        mpfr_mul(r18362185, r18362183, r18362184, MPFR_RNDN);
        mpfr_sub(r18362186, r18362180, r18362185, MPFR_RNDN);
        mpfr_sqrt(r18362187, r18362186, MPFR_RNDN);
        mpfr_add(r18362188, r18362179, r18362187, MPFR_RNDN);
        mpfr_div(r18362189, r18362188, r18362183, MPFR_RNDN);
        return mpfr_get_d(r18362189, MPFR_RNDN);
}

static mpfr_t r18362190, r18362191, r18362192, r18362193, r18362194, r18362195, r18362196, r18362197, r18362198, r18362199, r18362200, r18362201, r18362202, r18362203;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(656);
        mpfr_init_set_str(r18362190, "1", 10, MPFR_RNDN);
        mpfr_init(r18362191);
        mpfr_init(r18362192);
        mpfr_init(r18362193);
        mpfr_init(r18362194);
        mpfr_init_set_str(r18362195, "3", 10, MPFR_RNDN);
        mpfr_init(r18362196);
        mpfr_init(r18362197);
        mpfr_init(r18362198);
        mpfr_init(r18362199);
        mpfr_init(r18362200);
        mpfr_init(r18362201);
        mpfr_init(r18362202);
        mpfr_init(r18362203);
}

double f_fm(double a, double b, double c, double __attribute__((unused)) d) {
        ;
        mpfr_set_d(r18362191, b, MPFR_RNDN);
        mpfr_neg(r18362192, r18362191, MPFR_RNDN);
        mpfr_mul(r18362193, r18362191, r18362191, MPFR_RNDN);
        mpfr_set_d(r18362194, c, MPFR_RNDN);
        ;
        mpfr_mul(r18362196, r18362194, r18362195, MPFR_RNDN);
        mpfr_set_d(r18362197, a, MPFR_RNDN);
        mpfr_mul(r18362198, r18362196, r18362197, MPFR_RNDN);
        mpfr_sub(r18362199, r18362193, r18362198, MPFR_RNDN);
        mpfr_sqrt(r18362200, r18362199, MPFR_RNDN);
        mpfr_sub(r18362201, r18362192, r18362200, MPFR_RNDN);
        mpfr_div(r18362202, r18362201, r18362194, MPFR_RNDN);
        mpfr_div(r18362203, r18362190, r18362202, MPFR_RNDN);
        return mpfr_get_d(r18362203, MPFR_RNDN);
}

static mpfr_t r18362204, r18362205, r18362206, r18362207, r18362208, r18362209, r18362210, r18362211, r18362212, r18362213, r18362214, r18362215, r18362216, r18362217;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(656);
        mpfr_init_set_str(r18362204, "1", 10, MPFR_RNDN);
        mpfr_init(r18362205);
        mpfr_init(r18362206);
        mpfr_init(r18362207);
        mpfr_init(r18362208);
        mpfr_init_set_str(r18362209, "3", 10, MPFR_RNDN);
        mpfr_init(r18362210);
        mpfr_init(r18362211);
        mpfr_init(r18362212);
        mpfr_init(r18362213);
        mpfr_init(r18362214);
        mpfr_init(r18362215);
        mpfr_init(r18362216);
        mpfr_init(r18362217);
}

double f_dm(double a, double b, double c, double __attribute__((unused)) d) {
        ;
        mpfr_set_d(r18362205, b, MPFR_RNDN);
        mpfr_neg(r18362206, r18362205, MPFR_RNDN);
        mpfr_mul(r18362207, r18362205, r18362205, MPFR_RNDN);
        mpfr_set_d(r18362208, c, MPFR_RNDN);
        ;
        mpfr_mul(r18362210, r18362208, r18362209, MPFR_RNDN);
        mpfr_set_d(r18362211, a, MPFR_RNDN);
        mpfr_mul(r18362212, r18362210, r18362211, MPFR_RNDN);
        mpfr_sub(r18362213, r18362207, r18362212, MPFR_RNDN);
        mpfr_sqrt(r18362214, r18362213, MPFR_RNDN);
        mpfr_sub(r18362215, r18362206, r18362214, MPFR_RNDN);
        mpfr_div(r18362216, r18362215, r18362208, MPFR_RNDN);
        mpfr_div(r18362217, r18362204, r18362216, MPFR_RNDN);
        return mpfr_get_d(r18362217, MPFR_RNDN);
}

