#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 r3911806 = b;
        float r3911807 = -r3911806;
        float r3911808 = r3911806 * r3911806;
        float r3911809 = 3;
        float r3911810 = a;
        float r3911811 = r3911809 * r3911810;
        float r3911812 = c;
        float r3911813 = r3911811 * r3911812;
        float r3911814 = r3911808 - r3911813;
        float r3911815 = sqrt(r3911814);
        float r3911816 = r3911807 + r3911815;
        float r3911817 = r3911816 / r3911811;
        return r3911817;
}

double f_id(double a, double b, double c, double __attribute__((unused)) d) {
        double r3911818 = b;
        double r3911819 = -r3911818;
        double r3911820 = r3911818 * r3911818;
        double r3911821 = 3;
        double r3911822 = a;
        double r3911823 = r3911821 * r3911822;
        double r3911824 = c;
        double r3911825 = r3911823 * r3911824;
        double r3911826 = r3911820 - r3911825;
        double r3911827 = sqrt(r3911826);
        double r3911828 = r3911819 + r3911827;
        double r3911829 = r3911828 / r3911823;
        return r3911829;
}


double f_of(float a, float b, float c, float __attribute__((unused)) d) {
        float r3911830 = 3;
        float r3911831 = r3911830 / r3911830;
        float r3911832 = c;
        float r3911833 = b;
        float r3911834 = -r3911833;
        float r3911835 = r3911833 * r3911833;
        float r3911836 = a;
        float r3911837 = r3911832 * r3911836;
        float r3911838 = r3911837 * r3911830;
        float r3911839 = r3911835 - r3911838;
        float r3911840 = sqrt(r3911839);
        float r3911841 = r3911834 - r3911840;
        float r3911842 = r3911832 / r3911841;
        float r3911843 = r3911831 * r3911842;
        return r3911843;
}

double f_od(double a, double b, double c, double __attribute__((unused)) d) {
        double r3911844 = 3;
        double r3911845 = r3911844 / r3911844;
        double r3911846 = c;
        double r3911847 = b;
        double r3911848 = -r3911847;
        double r3911849 = r3911847 * r3911847;
        double r3911850 = a;
        double r3911851 = r3911846 * r3911850;
        double r3911852 = r3911851 * r3911844;
        double r3911853 = r3911849 - r3911852;
        double r3911854 = sqrt(r3911853);
        double r3911855 = r3911848 - r3911854;
        double r3911856 = r3911846 / r3911855;
        double r3911857 = r3911845 * r3911856;
        return r3911857;
}

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 r3911858, r3911859, r3911860, r3911861, r3911862, r3911863, r3911864, r3911865, r3911866, r3911867, r3911868, r3911869;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(912);
        mpfr_init(r3911858);
        mpfr_init(r3911859);
        mpfr_init(r3911860);
        mpfr_init_set_str(r3911861, "3", 10, MPFR_RNDN);
        mpfr_init(r3911862);
        mpfr_init(r3911863);
        mpfr_init(r3911864);
        mpfr_init(r3911865);
        mpfr_init(r3911866);
        mpfr_init(r3911867);
        mpfr_init(r3911868);
        mpfr_init(r3911869);
}

double f_im(double a, double b, double c, double __attribute__((unused)) d) {
        mpfr_set_d(r3911858, b, MPFR_RNDN);
        mpfr_neg(r3911859, r3911858, MPFR_RNDN);
        mpfr_mul(r3911860, r3911858, r3911858, MPFR_RNDN);
        ;
        mpfr_set_d(r3911862, a, MPFR_RNDN);
        mpfr_mul(r3911863, r3911861, r3911862, MPFR_RNDN);
        mpfr_set_d(r3911864, c, MPFR_RNDN);
        mpfr_mul(r3911865, r3911863, r3911864, MPFR_RNDN);
        mpfr_sub(r3911866, r3911860, r3911865, MPFR_RNDN);
        mpfr_sqrt(r3911867, r3911866, MPFR_RNDN);
        mpfr_add(r3911868, r3911859, r3911867, MPFR_RNDN);
        mpfr_div(r3911869, r3911868, r3911863, MPFR_RNDN);
        return mpfr_get_d(r3911869, MPFR_RNDN);
}

static mpfr_t r3911870, r3911871, r3911872, r3911873, r3911874, r3911875, r3911876, r3911877, r3911878, r3911879, r3911880, r3911881, r3911882, r3911883;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(912);
        mpfr_init_set_str(r3911870, "3", 10, MPFR_RNDN);
        mpfr_init(r3911871);
        mpfr_init(r3911872);
        mpfr_init(r3911873);
        mpfr_init(r3911874);
        mpfr_init(r3911875);
        mpfr_init(r3911876);
        mpfr_init(r3911877);
        mpfr_init(r3911878);
        mpfr_init(r3911879);
        mpfr_init(r3911880);
        mpfr_init(r3911881);
        mpfr_init(r3911882);
        mpfr_init(r3911883);
}

double f_fm(double a, double b, double c, double __attribute__((unused)) d) {
        ;
        mpfr_div(r3911871, r3911870, r3911870, MPFR_RNDN);
        mpfr_set_d(r3911872, c, MPFR_RNDN);
        mpfr_set_d(r3911873, b, MPFR_RNDN);
        mpfr_neg(r3911874, r3911873, MPFR_RNDN);
        mpfr_mul(r3911875, r3911873, r3911873, MPFR_RNDN);
        mpfr_set_d(r3911876, a, MPFR_RNDN);
        mpfr_mul(r3911877, r3911872, r3911876, MPFR_RNDN);
        mpfr_mul(r3911878, r3911877, r3911870, MPFR_RNDN);
        mpfr_sub(r3911879, r3911875, r3911878, MPFR_RNDN);
        mpfr_sqrt(r3911880, r3911879, MPFR_RNDN);
        mpfr_sub(r3911881, r3911874, r3911880, MPFR_RNDN);
        mpfr_div(r3911882, r3911872, r3911881, MPFR_RNDN);
        mpfr_mul(r3911883, r3911871, r3911882, MPFR_RNDN);
        return mpfr_get_d(r3911883, MPFR_RNDN);
}

static mpfr_t r3911884, r3911885, r3911886, r3911887, r3911888, r3911889, r3911890, r3911891, r3911892, r3911893, r3911894, r3911895, r3911896, r3911897;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(912);
        mpfr_init_set_str(r3911884, "3", 10, MPFR_RNDN);
        mpfr_init(r3911885);
        mpfr_init(r3911886);
        mpfr_init(r3911887);
        mpfr_init(r3911888);
        mpfr_init(r3911889);
        mpfr_init(r3911890);
        mpfr_init(r3911891);
        mpfr_init(r3911892);
        mpfr_init(r3911893);
        mpfr_init(r3911894);
        mpfr_init(r3911895);
        mpfr_init(r3911896);
        mpfr_init(r3911897);
}

double f_dm(double a, double b, double c, double __attribute__((unused)) d) {
        ;
        mpfr_div(r3911885, r3911884, r3911884, MPFR_RNDN);
        mpfr_set_d(r3911886, c, MPFR_RNDN);
        mpfr_set_d(r3911887, b, MPFR_RNDN);
        mpfr_neg(r3911888, r3911887, MPFR_RNDN);
        mpfr_mul(r3911889, r3911887, r3911887, MPFR_RNDN);
        mpfr_set_d(r3911890, a, MPFR_RNDN);
        mpfr_mul(r3911891, r3911886, r3911890, MPFR_RNDN);
        mpfr_mul(r3911892, r3911891, r3911884, MPFR_RNDN);
        mpfr_sub(r3911893, r3911889, r3911892, MPFR_RNDN);
        mpfr_sqrt(r3911894, r3911893, MPFR_RNDN);
        mpfr_sub(r3911895, r3911888, r3911894, MPFR_RNDN);
        mpfr_div(r3911896, r3911886, r3911895, MPFR_RNDN);
        mpfr_mul(r3911897, r3911885, r3911896, MPFR_RNDN);
        return mpfr_get_d(r3911897, MPFR_RNDN);
}

