#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 r7838 = b;
        float r7839 = -r7838;
        float r7840 = r7838 * r7838;
        float r7841 = 4.0f;
        float r7842 = a;
        float r7843 = r7841 * r7842;
        float r7844 = c;
        float r7845 = r7843 * r7844;
        float r7846 = r7840 - r7845;
        float r7847 = sqrt(r7846);
        float r7848 = r7839 + r7847;
        float r7849 = 2.0f;
        float r7850 = r7849 * r7842;
        float r7851 = r7848 / r7850;
        return r7851;
}

double f_id(double a, double b, double c) {
        double r7852 = b;
        double r7853 = -r7852;
        double r7854 = r7852 * r7852;
        double r7855 = 4.0;
        double r7856 = a;
        double r7857 = r7855 * r7856;
        double r7858 = c;
        double r7859 = r7857 * r7858;
        double r7860 = r7854 - r7859;
        double r7861 = sqrt(r7860);
        double r7862 = r7853 + r7861;
        double r7863 = 2.0;
        double r7864 = r7863 * r7856;
        double r7865 = r7862 / r7864;
        return r7865;
}


double f_of(float a, float b, float c) {
        float r7866 = a;
        float r7867 = c;
        float r7868 = r7866 * r7867;
        float r7869 = 4.0f;
        float r7870 = r7868 * r7869;
        float r7871 = 2.0f;
        float r7872 = r7866 * r7871;
        float r7873 = r7870 / r7872;
        float r7874 = b;
        float r7875 = -r7874;
        float r7876 = r7869 * r7866;
        float r7877 = -r7867;
        float r7878 = r7876 * r7877;
        float r7879 = fma(r7874, r7874, r7878);
        float r7880 = sqrt(r7879);
        float r7881 = r7875 - r7880;
        float r7882 = r7873 / r7881;
        return r7882;
}

double f_od(double a, double b, double c) {
        double r7883 = a;
        double r7884 = c;
        double r7885 = r7883 * r7884;
        double r7886 = 4.0;
        double r7887 = r7885 * r7886;
        double r7888 = 2.0;
        double r7889 = r7883 * r7888;
        double r7890 = r7887 / r7889;
        double r7891 = b;
        double r7892 = -r7891;
        double r7893 = r7886 * r7883;
        double r7894 = -r7884;
        double r7895 = r7893 * r7894;
        double r7896 = fma(r7891, r7891, r7895);
        double r7897 = sqrt(r7896);
        double r7898 = r7892 - r7897;
        double r7899 = r7890 / r7898;
        return r7899;
}

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 r7900, r7901, r7902, r7903, r7904, r7905, r7906, r7907, r7908, r7909, r7910, r7911, r7912, r7913;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(848);
        mpfr_init(r7900);
        mpfr_init(r7901);
        mpfr_init(r7902);
        mpfr_init_set_str(r7903, "4", 10, MPFR_RNDN);
        mpfr_init(r7904);
        mpfr_init(r7905);
        mpfr_init(r7906);
        mpfr_init(r7907);
        mpfr_init(r7908);
        mpfr_init(r7909);
        mpfr_init(r7910);
        mpfr_init_set_str(r7911, "2", 10, MPFR_RNDN);
        mpfr_init(r7912);
        mpfr_init(r7913);
}

double f_im(double a, double b, double c) {
        mpfr_set_d(r7900, b, MPFR_RNDN);
        mpfr_neg(r7901, r7900, MPFR_RNDN);
        mpfr_mul(r7902, r7900, r7900, MPFR_RNDN);
        ;
        mpfr_set_d(r7904, a, MPFR_RNDN);
        mpfr_mul(r7905, r7903, r7904, MPFR_RNDN);
        mpfr_set_d(r7906, c, MPFR_RNDN);
        mpfr_mul(r7907, r7905, r7906, MPFR_RNDN);
        mpfr_sub(r7908, r7902, r7907, MPFR_RNDN);
        mpfr_sqrt(r7909, r7908, MPFR_RNDN);
        mpfr_add(r7910, r7901, r7909, MPFR_RNDN);
        ;
        mpfr_mul(r7912, r7911, r7904, MPFR_RNDN);
        mpfr_div(r7913, r7910, r7912, MPFR_RNDN);
        return mpfr_get_d(r7913, MPFR_RNDN);
}

static mpfr_t r7914, r7915, r7916, r7917, r7918, r7919, r7920, r7921, r7922, r7923, r7924, r7925, r7926, r7927, r7928, r7929, r7930;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(848);
        mpfr_init(r7914);
        mpfr_init(r7915);
        mpfr_init(r7916);
        mpfr_init_set_str(r7917, "4", 10, MPFR_RNDN);
        mpfr_init(r7918);
        mpfr_init_set_str(r7919, "2", 10, MPFR_RNDN);
        mpfr_init(r7920);
        mpfr_init(r7921);
        mpfr_init(r7922);
        mpfr_init(r7923);
        mpfr_init(r7924);
        mpfr_init(r7925);
        mpfr_init(r7926);
        mpfr_init(r7927);
        mpfr_init(r7928);
        mpfr_init(r7929);
        mpfr_init(r7930);
}

double f_fm(double a, double b, double c) {
        mpfr_set_d(r7914, a, MPFR_RNDN);
        mpfr_set_d(r7915, c, MPFR_RNDN);
        mpfr_mul(r7916, r7914, r7915, MPFR_RNDN);
        ;
        mpfr_mul(r7918, r7916, r7917, MPFR_RNDN);
        ;
        mpfr_mul(r7920, r7914, r7919, MPFR_RNDN);
        mpfr_div(r7921, r7918, r7920, MPFR_RNDN);
        mpfr_set_d(r7922, b, MPFR_RNDN);
        mpfr_neg(r7923, r7922, MPFR_RNDN);
        mpfr_mul(r7924, r7917, r7914, MPFR_RNDN);
        mpfr_neg(r7925, r7915, MPFR_RNDN);
        mpfr_mul(r7926, r7924, r7925, MPFR_RNDN);
        mpfr_fma(r7927, r7922, r7922, r7926, MPFR_RNDN);
        mpfr_sqrt(r7928, r7927, MPFR_RNDN);
        mpfr_sub(r7929, r7923, r7928, MPFR_RNDN);
        mpfr_div(r7930, r7921, r7929, MPFR_RNDN);
        return mpfr_get_d(r7930, MPFR_RNDN);
}

static mpfr_t r7931, r7932, r7933, r7934, r7935, r7936, r7937, r7938, r7939, r7940, r7941, r7942, r7943, r7944, r7945, r7946, r7947;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(848);
        mpfr_init(r7931);
        mpfr_init(r7932);
        mpfr_init(r7933);
        mpfr_init_set_str(r7934, "4", 10, MPFR_RNDN);
        mpfr_init(r7935);
        mpfr_init_set_str(r7936, "2", 10, MPFR_RNDN);
        mpfr_init(r7937);
        mpfr_init(r7938);
        mpfr_init(r7939);
        mpfr_init(r7940);
        mpfr_init(r7941);
        mpfr_init(r7942);
        mpfr_init(r7943);
        mpfr_init(r7944);
        mpfr_init(r7945);
        mpfr_init(r7946);
        mpfr_init(r7947);
}

double f_dm(double a, double b, double c) {
        mpfr_set_d(r7931, a, MPFR_RNDN);
        mpfr_set_d(r7932, c, MPFR_RNDN);
        mpfr_mul(r7933, r7931, r7932, MPFR_RNDN);
        ;
        mpfr_mul(r7935, r7933, r7934, MPFR_RNDN);
        ;
        mpfr_mul(r7937, r7931, r7936, MPFR_RNDN);
        mpfr_div(r7938, r7935, r7937, MPFR_RNDN);
        mpfr_set_d(r7939, b, MPFR_RNDN);
        mpfr_neg(r7940, r7939, MPFR_RNDN);
        mpfr_mul(r7941, r7934, r7931, MPFR_RNDN);
        mpfr_neg(r7942, r7932, MPFR_RNDN);
        mpfr_mul(r7943, r7941, r7942, MPFR_RNDN);
        mpfr_fma(r7944, r7939, r7939, r7943, MPFR_RNDN);
        mpfr_sqrt(r7945, r7944, MPFR_RNDN);
        mpfr_sub(r7946, r7940, r7945, MPFR_RNDN);
        mpfr_div(r7947, r7938, r7946, MPFR_RNDN);
        return mpfr_get_d(r7947, MPFR_RNDN);
}

