#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 r26442 = b;
        float r26443 = -r26442;
        float r26444 = r26442 * r26442;
        float r26445 = 3;
        float r26446 = a;
        float r26447 = r26445 * r26446;
        float r26448 = c;
        float r26449 = r26447 * r26448;
        float r26450 = r26444 - r26449;
        float r26451 = sqrt(r26450);
        float r26452 = r26443 + r26451;
        float r26453 = r26452 / r26447;
        return r26453;
}

double f_id(double a, double b, double c, double __attribute__((unused)) d) {
        double r26454 = b;
        double r26455 = -r26454;
        double r26456 = r26454 * r26454;
        double r26457 = 3;
        double r26458 = a;
        double r26459 = r26457 * r26458;
        double r26460 = c;
        double r26461 = r26459 * r26460;
        double r26462 = r26456 - r26461;
        double r26463 = sqrt(r26462);
        double r26464 = r26455 + r26463;
        double r26465 = r26464 / r26459;
        return r26465;
}


double f_of(float a, float b, float c, float __attribute__((unused)) d) {
        float r26466 = a;
        float r26467 = 3;
        float r26468 = r26466 / r26467;
        float r26469 = c;
        float r26470 = r26468 * r26469;
        float r26471 = -r26467;
        float r26472 = r26467 * r26466;
        float r26473 = -r26469;
        float r26474 = b;
        float r26475 = r26474 * r26474;
        float r26476 = fma(r26472, r26473, r26475);
        float r26477 = sqrt(r26476);
        float r26478 = r26477 + r26474;
        float r26479 = r26471 / r26478;
        float r26480 = r26479 / r26466;
        float r26481 = r26470 * r26480;
        return r26481;
}

double f_od(double a, double b, double c, double __attribute__((unused)) d) {
        double r26482 = a;
        double r26483 = 3;
        double r26484 = r26482 / r26483;
        double r26485 = c;
        double r26486 = r26484 * r26485;
        double r26487 = -r26483;
        double r26488 = r26483 * r26482;
        double r26489 = -r26485;
        double r26490 = b;
        double r26491 = r26490 * r26490;
        double r26492 = fma(r26488, r26489, r26491);
        double r26493 = sqrt(r26492);
        double r26494 = r26493 + r26490;
        double r26495 = r26487 / r26494;
        double r26496 = r26495 / r26482;
        double r26497 = r26486 * r26496;
        return r26497;
}

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 r26498, r26499, r26500, r26501, r26502, r26503, r26504, r26505, r26506, r26507, r26508, r26509;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r26498);
        mpfr_init(r26499);
        mpfr_init(r26500);
        mpfr_init_set_str(r26501, "3", 10, MPFR_RNDN);
        mpfr_init(r26502);
        mpfr_init(r26503);
        mpfr_init(r26504);
        mpfr_init(r26505);
        mpfr_init(r26506);
        mpfr_init(r26507);
        mpfr_init(r26508);
        mpfr_init(r26509);
}

double f_im(double a, double b, double c, double __attribute__((unused)) d) {
        mpfr_set_d(r26498, b, MPFR_RNDN);
        mpfr_neg(r26499, r26498, MPFR_RNDN);
        mpfr_mul(r26500, r26498, r26498, MPFR_RNDN);
        ;
        mpfr_set_d(r26502, a, MPFR_RNDN);
        mpfr_mul(r26503, r26501, r26502, MPFR_RNDN);
        mpfr_set_d(r26504, c, MPFR_RNDN);
        mpfr_mul(r26505, r26503, r26504, MPFR_RNDN);
        mpfr_sub(r26506, r26500, r26505, MPFR_RNDN);
        mpfr_sqrt(r26507, r26506, MPFR_RNDN);
        mpfr_add(r26508, r26499, r26507, MPFR_RNDN);
        mpfr_div(r26509, r26508, r26503, MPFR_RNDN);
        return mpfr_get_d(r26509, MPFR_RNDN);
}

static mpfr_t r26510, r26511, r26512, r26513, r26514, r26515, r26516, r26517, r26518, r26519, r26520, r26521, r26522, r26523, r26524, r26525;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r26510);
        mpfr_init_set_str(r26511, "3", 10, MPFR_RNDN);
        mpfr_init(r26512);
        mpfr_init(r26513);
        mpfr_init(r26514);
        mpfr_init(r26515);
        mpfr_init(r26516);
        mpfr_init(r26517);
        mpfr_init(r26518);
        mpfr_init(r26519);
        mpfr_init(r26520);
        mpfr_init(r26521);
        mpfr_init(r26522);
        mpfr_init(r26523);
        mpfr_init(r26524);
        mpfr_init(r26525);
}

double f_fm(double a, double b, double c, double __attribute__((unused)) d) {
        mpfr_set_d(r26510, a, MPFR_RNDN);
        ;
        mpfr_div(r26512, r26510, r26511, MPFR_RNDN);
        mpfr_set_d(r26513, c, MPFR_RNDN);
        mpfr_mul(r26514, r26512, r26513, MPFR_RNDN);
        mpfr_neg(r26515, r26511, MPFR_RNDN);
        mpfr_mul(r26516, r26511, r26510, MPFR_RNDN);
        mpfr_neg(r26517, r26513, MPFR_RNDN);
        mpfr_set_d(r26518, b, MPFR_RNDN);
        mpfr_mul(r26519, r26518, r26518, MPFR_RNDN);
        mpfr_fma(r26520, r26516, r26517, r26519, MPFR_RNDN);
        mpfr_sqrt(r26521, r26520, MPFR_RNDN);
        mpfr_add(r26522, r26521, r26518, MPFR_RNDN);
        mpfr_div(r26523, r26515, r26522, MPFR_RNDN);
        mpfr_div(r26524, r26523, r26510, MPFR_RNDN);
        mpfr_mul(r26525, r26514, r26524, MPFR_RNDN);
        return mpfr_get_d(r26525, MPFR_RNDN);
}

static mpfr_t r26526, r26527, r26528, r26529, r26530, r26531, r26532, r26533, r26534, r26535, r26536, r26537, r26538, r26539, r26540, r26541;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r26526);
        mpfr_init_set_str(r26527, "3", 10, MPFR_RNDN);
        mpfr_init(r26528);
        mpfr_init(r26529);
        mpfr_init(r26530);
        mpfr_init(r26531);
        mpfr_init(r26532);
        mpfr_init(r26533);
        mpfr_init(r26534);
        mpfr_init(r26535);
        mpfr_init(r26536);
        mpfr_init(r26537);
        mpfr_init(r26538);
        mpfr_init(r26539);
        mpfr_init(r26540);
        mpfr_init(r26541);
}

double f_dm(double a, double b, double c, double __attribute__((unused)) d) {
        mpfr_set_d(r26526, a, MPFR_RNDN);
        ;
        mpfr_div(r26528, r26526, r26527, MPFR_RNDN);
        mpfr_set_d(r26529, c, MPFR_RNDN);
        mpfr_mul(r26530, r26528, r26529, MPFR_RNDN);
        mpfr_neg(r26531, r26527, MPFR_RNDN);
        mpfr_mul(r26532, r26527, r26526, MPFR_RNDN);
        mpfr_neg(r26533, r26529, MPFR_RNDN);
        mpfr_set_d(r26534, b, MPFR_RNDN);
        mpfr_mul(r26535, r26534, r26534, MPFR_RNDN);
        mpfr_fma(r26536, r26532, r26533, r26535, MPFR_RNDN);
        mpfr_sqrt(r26537, r26536, MPFR_RNDN);
        mpfr_add(r26538, r26537, r26534, MPFR_RNDN);
        mpfr_div(r26539, r26531, r26538, MPFR_RNDN);
        mpfr_div(r26540, r26539, r26526, MPFR_RNDN);
        mpfr_mul(r26541, r26530, r26540, MPFR_RNDN);
        return mpfr_get_d(r26541, MPFR_RNDN);
}

