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

char *name = "Quadratic roots, wide range";

double f_if(float a, float b, float c) {
        float r8106 = b;
        float r8107 = -r8106;
        float r8108 = r8106 * r8106;
        float r8109 = 4;
        float r8110 = a;
        float r8111 = r8109 * r8110;
        float r8112 = c;
        float r8113 = r8111 * r8112;
        float r8114 = r8108 - r8113;
        float r8115 = sqrt(r8114);
        float r8116 = r8107 + r8115;
        float r8117 = 2;
        float r8118 = r8117 * r8110;
        float r8119 = r8116 / r8118;
        return r8119;
}

double f_id(double a, double b, double c) {
        double r8120 = b;
        double r8121 = -r8120;
        double r8122 = r8120 * r8120;
        double r8123 = 4;
        double r8124 = a;
        double r8125 = r8123 * r8124;
        double r8126 = c;
        double r8127 = r8125 * r8126;
        double r8128 = r8122 - r8127;
        double r8129 = sqrt(r8128);
        double r8130 = r8121 + r8129;
        double r8131 = 2;
        double r8132 = r8131 * r8124;
        double r8133 = r8130 / r8132;
        return r8133;
}


double f_of(float a, float b, float c) {
        float r8134 = 4;
        float r8135 = 2;
        float r8136 = r8134 / r8135;
        float r8137 = c;
        float r8138 = b;
        float r8139 = -r8138;
        float r8140 = -r8137;
        float r8141 = a;
        float r8142 = r8134 * r8141;
        float r8143 = r8138 * r8138;
        float r8144 = fma(r8140, r8142, r8143);
        float r8145 = sqrt(r8144);
        float r8146 = r8139 - r8145;
        float r8147 = r8137 / r8146;
        float r8148 = r8136 * r8147;
        return r8148;
}

double f_od(double a, double b, double c) {
        double r8149 = 4;
        double r8150 = 2;
        double r8151 = r8149 / r8150;
        double r8152 = c;
        double r8153 = b;
        double r8154 = -r8153;
        double r8155 = -r8152;
        double r8156 = a;
        double r8157 = r8149 * r8156;
        double r8158 = r8153 * r8153;
        double r8159 = fma(r8155, r8157, r8158);
        double r8160 = sqrt(r8159);
        double r8161 = r8154 - r8160;
        double r8162 = r8152 / r8161;
        double r8163 = r8151 * r8162;
        return r8163;
}

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 r8164, r8165, r8166, r8167, r8168, r8169, r8170, r8171, r8172, r8173, r8174, r8175, r8176, r8177;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(848);
        mpfr_init(r8164);
        mpfr_init(r8165);
        mpfr_init(r8166);
        mpfr_init_set_str(r8167, "4", 10, MPFR_RNDN);
        mpfr_init(r8168);
        mpfr_init(r8169);
        mpfr_init(r8170);
        mpfr_init(r8171);
        mpfr_init(r8172);
        mpfr_init(r8173);
        mpfr_init(r8174);
        mpfr_init_set_str(r8175, "2", 10, MPFR_RNDN);
        mpfr_init(r8176);
        mpfr_init(r8177);
}

double f_im(double a, double b, double c) {
        mpfr_set_d(r8164, b, MPFR_RNDN);
        mpfr_neg(r8165, r8164, MPFR_RNDN);
        mpfr_mul(r8166, r8164, r8164, MPFR_RNDN);
        ;
        mpfr_set_d(r8168, a, MPFR_RNDN);
        mpfr_mul(r8169, r8167, r8168, MPFR_RNDN);
        mpfr_set_d(r8170, c, MPFR_RNDN);
        mpfr_mul(r8171, r8169, r8170, MPFR_RNDN);
        mpfr_sub(r8172, r8166, r8171, MPFR_RNDN);
        mpfr_sqrt(r8173, r8172, MPFR_RNDN);
        mpfr_add(r8174, r8165, r8173, MPFR_RNDN);
        ;
        mpfr_mul(r8176, r8175, r8168, MPFR_RNDN);
        mpfr_div(r8177, r8174, r8176, MPFR_RNDN);
        return mpfr_get_d(r8177, MPFR_RNDN);
}

static mpfr_t r8178, r8179, r8180, r8181, r8182, r8183, r8184, r8185, r8186, r8187, r8188, r8189, r8190, r8191, r8192;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(848);
        mpfr_init_set_str(r8178, "4", 10, MPFR_RNDN);
        mpfr_init_set_str(r8179, "2", 10, MPFR_RNDN);
        mpfr_init(r8180);
        mpfr_init(r8181);
        mpfr_init(r8182);
        mpfr_init(r8183);
        mpfr_init(r8184);
        mpfr_init(r8185);
        mpfr_init(r8186);
        mpfr_init(r8187);
        mpfr_init(r8188);
        mpfr_init(r8189);
        mpfr_init(r8190);
        mpfr_init(r8191);
        mpfr_init(r8192);
}

double f_fm(double a, double b, double c) {
        ;
        ;
        mpfr_div(r8180, r8178, r8179, MPFR_RNDN);
        mpfr_set_d(r8181, c, MPFR_RNDN);
        mpfr_set_d(r8182, b, MPFR_RNDN);
        mpfr_neg(r8183, r8182, MPFR_RNDN);
        mpfr_neg(r8184, r8181, MPFR_RNDN);
        mpfr_set_d(r8185, a, MPFR_RNDN);
        mpfr_mul(r8186, r8178, r8185, MPFR_RNDN);
        mpfr_mul(r8187, r8182, r8182, MPFR_RNDN);
        mpfr_fma(r8188, r8184, r8186, r8187, MPFR_RNDN);
        mpfr_sqrt(r8189, r8188, MPFR_RNDN);
        mpfr_sub(r8190, r8183, r8189, MPFR_RNDN);
        mpfr_div(r8191, r8181, r8190, MPFR_RNDN);
        mpfr_mul(r8192, r8180, r8191, MPFR_RNDN);
        return mpfr_get_d(r8192, MPFR_RNDN);
}

static mpfr_t r8193, r8194, r8195, r8196, r8197, r8198, r8199, r8200, r8201, r8202, r8203, r8204, r8205, r8206, r8207;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(848);
        mpfr_init_set_str(r8193, "4", 10, MPFR_RNDN);
        mpfr_init_set_str(r8194, "2", 10, MPFR_RNDN);
        mpfr_init(r8195);
        mpfr_init(r8196);
        mpfr_init(r8197);
        mpfr_init(r8198);
        mpfr_init(r8199);
        mpfr_init(r8200);
        mpfr_init(r8201);
        mpfr_init(r8202);
        mpfr_init(r8203);
        mpfr_init(r8204);
        mpfr_init(r8205);
        mpfr_init(r8206);
        mpfr_init(r8207);
}

double f_dm(double a, double b, double c) {
        ;
        ;
        mpfr_div(r8195, r8193, r8194, MPFR_RNDN);
        mpfr_set_d(r8196, c, MPFR_RNDN);
        mpfr_set_d(r8197, b, MPFR_RNDN);
        mpfr_neg(r8198, r8197, MPFR_RNDN);
        mpfr_neg(r8199, r8196, MPFR_RNDN);
        mpfr_set_d(r8200, a, MPFR_RNDN);
        mpfr_mul(r8201, r8193, r8200, MPFR_RNDN);
        mpfr_mul(r8202, r8197, r8197, MPFR_RNDN);
        mpfr_fma(r8203, r8199, r8201, r8202, MPFR_RNDN);
        mpfr_sqrt(r8204, r8203, MPFR_RNDN);
        mpfr_sub(r8205, r8198, r8204, MPFR_RNDN);
        mpfr_div(r8206, r8196, r8205, MPFR_RNDN);
        mpfr_mul(r8207, r8195, r8206, MPFR_RNDN);
        return mpfr_get_d(r8207, MPFR_RNDN);
}

