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

char *name = "Cubic critical, wide range";

double f_if(float a, float b, float c, float __attribute__((unused)) d) {
        float r9824 = b;
        float r9825 = -r9824;
        float r9826 = r9824 * r9824;
        float r9827 = 3;
        float r9828 = a;
        float r9829 = r9827 * r9828;
        float r9830 = c;
        float r9831 = r9829 * r9830;
        float r9832 = r9826 - r9831;
        float r9833 = sqrt(r9832);
        float r9834 = r9825 + r9833;
        float r9835 = r9834 / r9829;
        return r9835;
}

double f_id(double a, double b, double c, double __attribute__((unused)) d) {
        double r9836 = b;
        double r9837 = -r9836;
        double r9838 = r9836 * r9836;
        double r9839 = 3;
        double r9840 = a;
        double r9841 = r9839 * r9840;
        double r9842 = c;
        double r9843 = r9841 * r9842;
        double r9844 = r9838 - r9843;
        double r9845 = sqrt(r9844);
        double r9846 = r9837 + r9845;
        double r9847 = r9846 / r9841;
        return r9847;
}


double f_of(float a, float b, float c, float __attribute__((unused)) d) {
        float r9848 = 3;
        float r9849 = r9848 / r9848;
        float r9850 = c;
        float r9851 = b;
        float r9852 = -r9851;
        float r9853 = r9851 * r9851;
        float r9854 = r9850 * r9848;
        float r9855 = a;
        float r9856 = r9854 * r9855;
        float r9857 = r9853 - r9856;
        float r9858 = sqrt(r9857);
        float r9859 = r9852 - r9858;
        float r9860 = r9850 / r9859;
        float r9861 = r9849 * r9860;
        return r9861;
}

double f_od(double a, double b, double c, double __attribute__((unused)) d) {
        double r9862 = 3;
        double r9863 = r9862 / r9862;
        double r9864 = c;
        double r9865 = b;
        double r9866 = -r9865;
        double r9867 = r9865 * r9865;
        double r9868 = r9864 * r9862;
        double r9869 = a;
        double r9870 = r9868 * r9869;
        double r9871 = r9867 - r9870;
        double r9872 = sqrt(r9871);
        double r9873 = r9866 - r9872;
        double r9874 = r9864 / r9873;
        double r9875 = r9863 * r9874;
        return r9875;
}

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 r9876, r9877, r9878, r9879, r9880, r9881, r9882, r9883, r9884, r9885, r9886, r9887;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(848);
        mpfr_init(r9876);
        mpfr_init(r9877);
        mpfr_init(r9878);
        mpfr_init_set_str(r9879, "3", 10, MPFR_RNDN);
        mpfr_init(r9880);
        mpfr_init(r9881);
        mpfr_init(r9882);
        mpfr_init(r9883);
        mpfr_init(r9884);
        mpfr_init(r9885);
        mpfr_init(r9886);
        mpfr_init(r9887);
}

double f_im(double a, double b, double c, double __attribute__((unused)) d) {
        mpfr_set_d(r9876, b, MPFR_RNDN);
        mpfr_neg(r9877, r9876, MPFR_RNDN);
        mpfr_mul(r9878, r9876, r9876, MPFR_RNDN);
        ;
        mpfr_set_d(r9880, a, MPFR_RNDN);
        mpfr_mul(r9881, r9879, r9880, MPFR_RNDN);
        mpfr_set_d(r9882, c, MPFR_RNDN);
        mpfr_mul(r9883, r9881, r9882, MPFR_RNDN);
        mpfr_sub(r9884, r9878, r9883, MPFR_RNDN);
        mpfr_sqrt(r9885, r9884, MPFR_RNDN);
        mpfr_add(r9886, r9877, r9885, MPFR_RNDN);
        mpfr_div(r9887, r9886, r9881, MPFR_RNDN);
        return mpfr_get_d(r9887, MPFR_RNDN);
}

static mpfr_t r9888, r9889, r9890, r9891, r9892, r9893, r9894, r9895, r9896, r9897, r9898, r9899, r9900, r9901;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(848);
        mpfr_init_set_str(r9888, "3", 10, MPFR_RNDN);
        mpfr_init(r9889);
        mpfr_init(r9890);
        mpfr_init(r9891);
        mpfr_init(r9892);
        mpfr_init(r9893);
        mpfr_init(r9894);
        mpfr_init(r9895);
        mpfr_init(r9896);
        mpfr_init(r9897);
        mpfr_init(r9898);
        mpfr_init(r9899);
        mpfr_init(r9900);
        mpfr_init(r9901);
}

double f_fm(double a, double b, double c, double __attribute__((unused)) d) {
        ;
        mpfr_div(r9889, r9888, r9888, MPFR_RNDN);
        mpfr_set_d(r9890, c, MPFR_RNDN);
        mpfr_set_d(r9891, b, MPFR_RNDN);
        mpfr_neg(r9892, r9891, MPFR_RNDN);
        mpfr_mul(r9893, r9891, r9891, MPFR_RNDN);
        mpfr_mul(r9894, r9890, r9888, MPFR_RNDN);
        mpfr_set_d(r9895, a, MPFR_RNDN);
        mpfr_mul(r9896, r9894, r9895, MPFR_RNDN);
        mpfr_sub(r9897, r9893, r9896, MPFR_RNDN);
        mpfr_sqrt(r9898, r9897, MPFR_RNDN);
        mpfr_sub(r9899, r9892, r9898, MPFR_RNDN);
        mpfr_div(r9900, r9890, r9899, MPFR_RNDN);
        mpfr_mul(r9901, r9889, r9900, MPFR_RNDN);
        return mpfr_get_d(r9901, MPFR_RNDN);
}

static mpfr_t r9902, r9903, r9904, r9905, r9906, r9907, r9908, r9909, r9910, r9911, r9912, r9913, r9914, r9915;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(848);
        mpfr_init_set_str(r9902, "3", 10, MPFR_RNDN);
        mpfr_init(r9903);
        mpfr_init(r9904);
        mpfr_init(r9905);
        mpfr_init(r9906);
        mpfr_init(r9907);
        mpfr_init(r9908);
        mpfr_init(r9909);
        mpfr_init(r9910);
        mpfr_init(r9911);
        mpfr_init(r9912);
        mpfr_init(r9913);
        mpfr_init(r9914);
        mpfr_init(r9915);
}

double f_dm(double a, double b, double c, double __attribute__((unused)) d) {
        ;
        mpfr_div(r9903, r9902, r9902, MPFR_RNDN);
        mpfr_set_d(r9904, c, MPFR_RNDN);
        mpfr_set_d(r9905, b, MPFR_RNDN);
        mpfr_neg(r9906, r9905, MPFR_RNDN);
        mpfr_mul(r9907, r9905, r9905, MPFR_RNDN);
        mpfr_mul(r9908, r9904, r9902, MPFR_RNDN);
        mpfr_set_d(r9909, a, MPFR_RNDN);
        mpfr_mul(r9910, r9908, r9909, MPFR_RNDN);
        mpfr_sub(r9911, r9907, r9910, MPFR_RNDN);
        mpfr_sqrt(r9912, r9911, MPFR_RNDN);
        mpfr_sub(r9913, r9906, r9912, MPFR_RNDN);
        mpfr_div(r9914, r9904, r9913, MPFR_RNDN);
        mpfr_mul(r9915, r9903, r9914, MPFR_RNDN);
        return mpfr_get_d(r9915, MPFR_RNDN);
}

