#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 r44554 = x;
        float r44555 = y;
        float r44556 = r44554 * r44555;
        float r44557 = z;
        float r44558 = r44555 * r44557;
        float r44559 = r44556 - r44558;
        float r44560 = r44555 * r44555;
        float r44561 = r44559 - r44560;
        float r44562 = r44561 + r44560;
        return r44562;
}

double f_id(double x, double y, double z) {
        double r44563 = x;
        double r44564 = y;
        double r44565 = r44563 * r44564;
        double r44566 = z;
        double r44567 = r44564 * r44566;
        double r44568 = r44565 - r44567;
        double r44569 = r44564 * r44564;
        double r44570 = r44568 - r44569;
        double r44571 = r44570 + r44569;
        return r44571;
}


double f_of(float x, float y, float z) {
        float r44572 = x;
        float r44573 = z;
        float r44574 = r44572 - r44573;
        float r44575 = y;
        float r44576 = r44574 * r44575;
        return r44576;
}

double f_od(double x, double y, double z) {
        double r44577 = x;
        double r44578 = z;
        double r44579 = r44577 - r44578;
        double r44580 = y;
        double r44581 = r44579 * r44580;
        return r44581;
}

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 r44582, r44583, r44584, r44585, r44586, r44587, r44588, r44589, r44590;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r44582);
        mpfr_init(r44583);
        mpfr_init(r44584);
        mpfr_init(r44585);
        mpfr_init(r44586);
        mpfr_init(r44587);
        mpfr_init(r44588);
        mpfr_init(r44589);
        mpfr_init(r44590);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r44582, x, MPFR_RNDN);
        mpfr_set_d(r44583, y, MPFR_RNDN);
        mpfr_mul(r44584, r44582, r44583, MPFR_RNDN);
        mpfr_set_d(r44585, z, MPFR_RNDN);
        mpfr_mul(r44586, r44583, r44585, MPFR_RNDN);
        mpfr_sub(r44587, r44584, r44586, MPFR_RNDN);
        mpfr_mul(r44588, r44583, r44583, MPFR_RNDN);
        mpfr_sub(r44589, r44587, r44588, MPFR_RNDN);
        mpfr_add(r44590, r44589, r44588, MPFR_RNDN);
        return mpfr_get_d(r44590, MPFR_RNDN);
}

static mpfr_t r44591, r44592, r44593, r44594, r44595;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r44591);
        mpfr_init(r44592);
        mpfr_init(r44593);
        mpfr_init(r44594);
        mpfr_init(r44595);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r44591, x, MPFR_RNDN);
        mpfr_set_d(r44592, z, MPFR_RNDN);
        mpfr_sub(r44593, r44591, r44592, MPFR_RNDN);
        mpfr_set_d(r44594, y, MPFR_RNDN);
        mpfr_mul(r44595, r44593, r44594, MPFR_RNDN);
        return mpfr_get_d(r44595, MPFR_RNDN);
}

static mpfr_t r44596, r44597, r44598, r44599, r44600;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r44596);
        mpfr_init(r44597);
        mpfr_init(r44598);
        mpfr_init(r44599);
        mpfr_init(r44600);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r44596, x, MPFR_RNDN);
        mpfr_set_d(r44597, z, MPFR_RNDN);
        mpfr_sub(r44598, r44596, r44597, MPFR_RNDN);
        mpfr_set_d(r44599, y, MPFR_RNDN);
        mpfr_mul(r44600, r44598, r44599, MPFR_RNDN);
        return mpfr_get_d(r44600, MPFR_RNDN);
}

