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

char *name = "Linear.Quaternion:$c/ from linear-1.19.1.3, B";

double f_if(float x, float y, float z) {
        float r46723 = x;
        float r46724 = y;
        float r46725 = r46723 * r46724;
        float r46726 = z;
        float r46727 = r46724 * r46726;
        float r46728 = r46725 - r46727;
        float r46729 = r46724 * r46724;
        float r46730 = r46728 - r46729;
        float r46731 = r46730 + r46729;
        return r46731;
}

double f_id(double x, double y, double z) {
        double r46732 = x;
        double r46733 = y;
        double r46734 = r46732 * r46733;
        double r46735 = z;
        double r46736 = r46733 * r46735;
        double r46737 = r46734 - r46736;
        double r46738 = r46733 * r46733;
        double r46739 = r46737 - r46738;
        double r46740 = r46739 + r46738;
        return r46740;
}


double f_of(float x, float y, float z) {
        float r46741 = x;
        float r46742 = z;
        float r46743 = r46741 - r46742;
        float r46744 = y;
        float r46745 = r46743 * r46744;
        return r46745;
}

double f_od(double x, double y, double z) {
        double r46746 = x;
        double r46747 = z;
        double r46748 = r46746 - r46747;
        double r46749 = y;
        double r46750 = r46748 * r46749;
        return r46750;
}

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 r46751, r46752, r46753, r46754, r46755, r46756, r46757, r46758, r46759;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1680);
        mpfr_init(r46751);
        mpfr_init(r46752);
        mpfr_init(r46753);
        mpfr_init(r46754);
        mpfr_init(r46755);
        mpfr_init(r46756);
        mpfr_init(r46757);
        mpfr_init(r46758);
        mpfr_init(r46759);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r46751, x, MPFR_RNDN);
        mpfr_set_d(r46752, y, MPFR_RNDN);
        mpfr_mul(r46753, r46751, r46752, MPFR_RNDN);
        mpfr_set_d(r46754, z, MPFR_RNDN);
        mpfr_mul(r46755, r46752, r46754, MPFR_RNDN);
        mpfr_sub(r46756, r46753, r46755, MPFR_RNDN);
        mpfr_mul(r46757, r46752, r46752, MPFR_RNDN);
        mpfr_sub(r46758, r46756, r46757, MPFR_RNDN);
        mpfr_add(r46759, r46758, r46757, MPFR_RNDN);
        return mpfr_get_d(r46759, MPFR_RNDN);
}

static mpfr_t r46760, r46761, r46762, r46763, r46764;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1680);
        mpfr_init(r46760);
        mpfr_init(r46761);
        mpfr_init(r46762);
        mpfr_init(r46763);
        mpfr_init(r46764);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r46760, x, MPFR_RNDN);
        mpfr_set_d(r46761, z, MPFR_RNDN);
        mpfr_sub(r46762, r46760, r46761, MPFR_RNDN);
        mpfr_set_d(r46763, y, MPFR_RNDN);
        mpfr_mul(r46764, r46762, r46763, MPFR_RNDN);
        return mpfr_get_d(r46764, MPFR_RNDN);
}

static mpfr_t r46765, r46766, r46767, r46768, r46769;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1680);
        mpfr_init(r46765);
        mpfr_init(r46766);
        mpfr_init(r46767);
        mpfr_init(r46768);
        mpfr_init(r46769);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r46765, x, MPFR_RNDN);
        mpfr_set_d(r46766, z, MPFR_RNDN);
        mpfr_sub(r46767, r46765, r46766, MPFR_RNDN);
        mpfr_set_d(r46768, y, MPFR_RNDN);
        mpfr_mul(r46769, r46767, r46768, MPFR_RNDN);
        return mpfr_get_d(r46769, MPFR_RNDN);
}

