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

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

double f_if(float a, float b, float c) {
        float r7951 = b;
        float r7952 = -r7951;
        float r7953 = r7951 * r7951;
        float r7954 = 4.0f;
        float r7955 = a;
        float r7956 = r7954 * r7955;
        float r7957 = c;
        float r7958 = r7956 * r7957;
        float r7959 = r7953 - r7958;
        float r7960 = sqrt(r7959);
        float r7961 = r7952 + r7960;
        float r7962 = 2.0f;
        float r7963 = r7962 * r7955;
        float r7964 = r7961 / r7963;
        return r7964;
}

double f_id(double a, double b, double c) {
        double r7965 = b;
        double r7966 = -r7965;
        double r7967 = r7965 * r7965;
        double r7968 = 4.0;
        double r7969 = a;
        double r7970 = r7968 * r7969;
        double r7971 = c;
        double r7972 = r7970 * r7971;
        double r7973 = r7967 - r7972;
        double r7974 = sqrt(r7973);
        double r7975 = r7966 + r7974;
        double r7976 = 2.0;
        double r7977 = r7976 * r7969;
        double r7978 = r7975 / r7977;
        return r7978;
}


double f_of(float a, float b, float c) {
        float r7979 = a;
        float r7980 = c;
        float r7981 = r7979 * r7980;
        float r7982 = 4.0f;
        float r7983 = r7981 * r7982;
        float r7984 = 2.0f;
        float r7985 = r7979 * r7984;
        float r7986 = r7983 / r7985;
        float r7987 = b;
        float r7988 = -r7987;
        float r7989 = r7987 * r7987;
        float r7990 = r7982 * r7979;
        float r7991 = r7990 * r7980;
        float r7992 = r7989 - r7991;
        float r7993 = sqrt(r7992);
        float r7994 = r7988 - r7993;
        float r7995 = r7986 / r7994;
        return r7995;
}

double f_od(double a, double b, double c) {
        double r7996 = a;
        double r7997 = c;
        double r7998 = r7996 * r7997;
        double r7999 = 4.0;
        double r8000 = r7998 * r7999;
        double r8001 = 2.0;
        double r8002 = r7996 * r8001;
        double r8003 = r8000 / r8002;
        double r8004 = b;
        double r8005 = -r8004;
        double r8006 = r8004 * r8004;
        double r8007 = r7999 * r7996;
        double r8008 = r8007 * r7997;
        double r8009 = r8006 - r8008;
        double r8010 = sqrt(r8009);
        double r8011 = r8005 - r8010;
        double r8012 = r8003 / r8011;
        return r8012;
}

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 r8013, r8014, r8015, r8016, r8017, r8018, r8019, r8020, r8021, r8022, r8023, r8024, r8025, r8026;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r8013);
        mpfr_init(r8014);
        mpfr_init(r8015);
        mpfr_init_set_str(r8016, "4", 10, MPFR_RNDN);
        mpfr_init(r8017);
        mpfr_init(r8018);
        mpfr_init(r8019);
        mpfr_init(r8020);
        mpfr_init(r8021);
        mpfr_init(r8022);
        mpfr_init(r8023);
        mpfr_init_set_str(r8024, "2", 10, MPFR_RNDN);
        mpfr_init(r8025);
        mpfr_init(r8026);
}

double f_im(double a, double b, double c) {
        mpfr_set_d(r8013, b, MPFR_RNDN);
        mpfr_neg(r8014, r8013, MPFR_RNDN);
        mpfr_mul(r8015, r8013, r8013, MPFR_RNDN);
        ;
        mpfr_set_d(r8017, a, MPFR_RNDN);
        mpfr_mul(r8018, r8016, r8017, MPFR_RNDN);
        mpfr_set_d(r8019, c, MPFR_RNDN);
        mpfr_mul(r8020, r8018, r8019, MPFR_RNDN);
        mpfr_sub(r8021, r8015, r8020, MPFR_RNDN);
        mpfr_sqrt(r8022, r8021, MPFR_RNDN);
        mpfr_add(r8023, r8014, r8022, MPFR_RNDN);
        ;
        mpfr_mul(r8025, r8024, r8017, MPFR_RNDN);
        mpfr_div(r8026, r8023, r8025, MPFR_RNDN);
        return mpfr_get_d(r8026, MPFR_RNDN);
}

static mpfr_t r8027, r8028, r8029, r8030, r8031, r8032, r8033, r8034, r8035, r8036, r8037, r8038, r8039, r8040, r8041, r8042, r8043;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r8027);
        mpfr_init(r8028);
        mpfr_init(r8029);
        mpfr_init_set_str(r8030, "4", 10, MPFR_RNDN);
        mpfr_init(r8031);
        mpfr_init_set_str(r8032, "2", 10, MPFR_RNDN);
        mpfr_init(r8033);
        mpfr_init(r8034);
        mpfr_init(r8035);
        mpfr_init(r8036);
        mpfr_init(r8037);
        mpfr_init(r8038);
        mpfr_init(r8039);
        mpfr_init(r8040);
        mpfr_init(r8041);
        mpfr_init(r8042);
        mpfr_init(r8043);
}

double f_fm(double a, double b, double c) {
        mpfr_set_d(r8027, a, MPFR_RNDN);
        mpfr_set_d(r8028, c, MPFR_RNDN);
        mpfr_mul(r8029, r8027, r8028, MPFR_RNDN);
        ;
        mpfr_mul(r8031, r8029, r8030, MPFR_RNDN);
        ;
        mpfr_mul(r8033, r8027, r8032, MPFR_RNDN);
        mpfr_div(r8034, r8031, r8033, MPFR_RNDN);
        mpfr_set_d(r8035, b, MPFR_RNDN);
        mpfr_neg(r8036, r8035, MPFR_RNDN);
        mpfr_mul(r8037, r8035, r8035, MPFR_RNDN);
        mpfr_mul(r8038, r8030, r8027, MPFR_RNDN);
        mpfr_mul(r8039, r8038, r8028, MPFR_RNDN);
        mpfr_sub(r8040, r8037, r8039, MPFR_RNDN);
        mpfr_sqrt(r8041, r8040, MPFR_RNDN);
        mpfr_sub(r8042, r8036, r8041, MPFR_RNDN);
        mpfr_div(r8043, r8034, r8042, MPFR_RNDN);
        return mpfr_get_d(r8043, MPFR_RNDN);
}

static mpfr_t r8044, r8045, r8046, r8047, r8048, r8049, r8050, r8051, r8052, r8053, r8054, r8055, r8056, r8057, r8058, r8059, r8060;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r8044);
        mpfr_init(r8045);
        mpfr_init(r8046);
        mpfr_init_set_str(r8047, "4", 10, MPFR_RNDN);
        mpfr_init(r8048);
        mpfr_init_set_str(r8049, "2", 10, MPFR_RNDN);
        mpfr_init(r8050);
        mpfr_init(r8051);
        mpfr_init(r8052);
        mpfr_init(r8053);
        mpfr_init(r8054);
        mpfr_init(r8055);
        mpfr_init(r8056);
        mpfr_init(r8057);
        mpfr_init(r8058);
        mpfr_init(r8059);
        mpfr_init(r8060);
}

double f_dm(double a, double b, double c) {
        mpfr_set_d(r8044, a, MPFR_RNDN);
        mpfr_set_d(r8045, c, MPFR_RNDN);
        mpfr_mul(r8046, r8044, r8045, MPFR_RNDN);
        ;
        mpfr_mul(r8048, r8046, r8047, MPFR_RNDN);
        ;
        mpfr_mul(r8050, r8044, r8049, MPFR_RNDN);
        mpfr_div(r8051, r8048, r8050, MPFR_RNDN);
        mpfr_set_d(r8052, b, MPFR_RNDN);
        mpfr_neg(r8053, r8052, MPFR_RNDN);
        mpfr_mul(r8054, r8052, r8052, MPFR_RNDN);
        mpfr_mul(r8055, r8047, r8044, MPFR_RNDN);
        mpfr_mul(r8056, r8055, r8045, MPFR_RNDN);
        mpfr_sub(r8057, r8054, r8056, MPFR_RNDN);
        mpfr_sqrt(r8058, r8057, MPFR_RNDN);
        mpfr_sub(r8059, r8053, r8058, MPFR_RNDN);
        mpfr_div(r8060, r8051, r8059, MPFR_RNDN);
        return mpfr_get_d(r8060, MPFR_RNDN);
}

