#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 r7948 = b;
        float r7949 = -r7948;
        float r7950 = r7948 * r7948;
        float r7951 = 4.0f;
        float r7952 = a;
        float r7953 = r7951 * r7952;
        float r7954 = c;
        float r7955 = r7953 * r7954;
        float r7956 = r7950 - r7955;
        float r7957 = sqrt(r7956);
        float r7958 = r7949 + r7957;
        float r7959 = 2.0f;
        float r7960 = r7959 * r7952;
        float r7961 = r7958 / r7960;
        return r7961;
}

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


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

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

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 r8010, r8011, r8012, r8013, r8014, r8015, r8016, r8017, r8018, r8019, r8020, r8021, r8022, r8023;

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

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

static mpfr_t r8024, r8025, r8026, r8027, r8028, r8029, r8030, r8031, r8032, r8033, r8034, r8035, r8036, r8037, r8038, r8039, r8040;

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

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

static mpfr_t r8041, r8042, r8043, r8044, r8045, r8046, r8047, r8048, r8049, r8050, r8051, r8052, r8053, r8054, r8055, r8056, r8057;

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

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

