#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, C";

double f_if(float x, float y, float z) {
        float r47614 = x;
        float r47615 = y;
        float r47616 = r47614 * r47615;
        float r47617 = r47615 * r47615;
        float r47618 = r47616 + r47617;
        float r47619 = z;
        float r47620 = r47615 * r47619;
        float r47621 = r47618 - r47620;
        float r47622 = r47621 - r47617;
        return r47622;
}

double f_id(double x, double y, double z) {
        double r47623 = x;
        double r47624 = y;
        double r47625 = r47623 * r47624;
        double r47626 = r47624 * r47624;
        double r47627 = r47625 + r47626;
        double r47628 = z;
        double r47629 = r47624 * r47628;
        double r47630 = r47627 - r47629;
        double r47631 = r47630 - r47626;
        return r47631;
}


double f_of(float x, float y, float z) {
        float r47632 = y;
        float r47633 = x;
        float r47634 = r47632 * r47633;
        float r47635 = z;
        float r47636 = -r47635;
        float r47637 = r47632 * r47636;
        float r47638 = r47634 + r47637;
        return r47638;
}

double f_od(double x, double y, double z) {
        double r47639 = y;
        double r47640 = x;
        double r47641 = r47639 * r47640;
        double r47642 = z;
        double r47643 = -r47642;
        double r47644 = r47639 * r47643;
        double r47645 = r47641 + r47644;
        return r47645;
}

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 r47646, r47647, r47648, r47649, r47650, r47651, r47652, r47653, r47654;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1680);
        mpfr_init(r47646);
        mpfr_init(r47647);
        mpfr_init(r47648);
        mpfr_init(r47649);
        mpfr_init(r47650);
        mpfr_init(r47651);
        mpfr_init(r47652);
        mpfr_init(r47653);
        mpfr_init(r47654);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r47646, x, MPFR_RNDN);
        mpfr_set_d(r47647, y, MPFR_RNDN);
        mpfr_mul(r47648, r47646, r47647, MPFR_RNDN);
        mpfr_mul(r47649, r47647, r47647, MPFR_RNDN);
        mpfr_add(r47650, r47648, r47649, MPFR_RNDN);
        mpfr_set_d(r47651, z, MPFR_RNDN);
        mpfr_mul(r47652, r47647, r47651, MPFR_RNDN);
        mpfr_sub(r47653, r47650, r47652, MPFR_RNDN);
        mpfr_sub(r47654, r47653, r47649, MPFR_RNDN);
        return mpfr_get_d(r47654, MPFR_RNDN);
}

static mpfr_t r47655, r47656, r47657, r47658, r47659, r47660, r47661;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1680);
        mpfr_init(r47655);
        mpfr_init(r47656);
        mpfr_init(r47657);
        mpfr_init(r47658);
        mpfr_init(r47659);
        mpfr_init(r47660);
        mpfr_init(r47661);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r47655, y, MPFR_RNDN);
        mpfr_set_d(r47656, x, MPFR_RNDN);
        mpfr_mul(r47657, r47655, r47656, MPFR_RNDN);
        mpfr_set_d(r47658, z, MPFR_RNDN);
        mpfr_neg(r47659, r47658, MPFR_RNDN);
        mpfr_mul(r47660, r47655, r47659, MPFR_RNDN);
        mpfr_add(r47661, r47657, r47660, MPFR_RNDN);
        return mpfr_get_d(r47661, MPFR_RNDN);
}

static mpfr_t r47662, r47663, r47664, r47665, r47666, r47667, r47668;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1680);
        mpfr_init(r47662);
        mpfr_init(r47663);
        mpfr_init(r47664);
        mpfr_init(r47665);
        mpfr_init(r47666);
        mpfr_init(r47667);
        mpfr_init(r47668);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r47662, y, MPFR_RNDN);
        mpfr_set_d(r47663, x, MPFR_RNDN);
        mpfr_mul(r47664, r47662, r47663, MPFR_RNDN);
        mpfr_set_d(r47665, z, MPFR_RNDN);
        mpfr_neg(r47666, r47665, MPFR_RNDN);
        mpfr_mul(r47667, r47662, r47666, MPFR_RNDN);
        mpfr_add(r47668, r47664, r47667, MPFR_RNDN);
        return mpfr_get_d(r47668, MPFR_RNDN);
}

