#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 r47422 = x;
        float r47423 = y;
        float r47424 = r47422 * r47423;
        float r47425 = r47423 * r47423;
        float r47426 = r47424 + r47425;
        float r47427 = z;
        float r47428 = r47423 * r47427;
        float r47429 = r47426 - r47428;
        float r47430 = r47429 - r47425;
        return r47430;
}

double f_id(double x, double y, double z) {
        double r47431 = x;
        double r47432 = y;
        double r47433 = r47431 * r47432;
        double r47434 = r47432 * r47432;
        double r47435 = r47433 + r47434;
        double r47436 = z;
        double r47437 = r47432 * r47436;
        double r47438 = r47435 - r47437;
        double r47439 = r47438 - r47434;
        return r47439;
}


double f_of(float x, float y, float z) {
        float r47440 = y;
        float r47441 = x;
        float r47442 = r47440 * r47441;
        float r47443 = z;
        float r47444 = -r47443;
        float r47445 = r47440 * r47444;
        float r47446 = r47442 + r47445;
        return r47446;
}

double f_od(double x, double y, double z) {
        double r47447 = y;
        double r47448 = x;
        double r47449 = r47447 * r47448;
        double r47450 = z;
        double r47451 = -r47450;
        double r47452 = r47447 * r47451;
        double r47453 = r47449 + r47452;
        return r47453;
}

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 r47454, r47455, r47456, r47457, r47458, r47459, r47460, r47461, r47462;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1680);
        mpfr_init(r47454);
        mpfr_init(r47455);
        mpfr_init(r47456);
        mpfr_init(r47457);
        mpfr_init(r47458);
        mpfr_init(r47459);
        mpfr_init(r47460);
        mpfr_init(r47461);
        mpfr_init(r47462);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r47454, x, MPFR_RNDN);
        mpfr_set_d(r47455, y, MPFR_RNDN);
        mpfr_mul(r47456, r47454, r47455, MPFR_RNDN);
        mpfr_mul(r47457, r47455, r47455, MPFR_RNDN);
        mpfr_add(r47458, r47456, r47457, MPFR_RNDN);
        mpfr_set_d(r47459, z, MPFR_RNDN);
        mpfr_mul(r47460, r47455, r47459, MPFR_RNDN);
        mpfr_sub(r47461, r47458, r47460, MPFR_RNDN);
        mpfr_sub(r47462, r47461, r47457, MPFR_RNDN);
        return mpfr_get_d(r47462, MPFR_RNDN);
}

static mpfr_t r47463, r47464, r47465, r47466, r47467, r47468, r47469;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1680);
        mpfr_init(r47463);
        mpfr_init(r47464);
        mpfr_init(r47465);
        mpfr_init(r47466);
        mpfr_init(r47467);
        mpfr_init(r47468);
        mpfr_init(r47469);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r47463, y, MPFR_RNDN);
        mpfr_set_d(r47464, x, MPFR_RNDN);
        mpfr_mul(r47465, r47463, r47464, MPFR_RNDN);
        mpfr_set_d(r47466, z, MPFR_RNDN);
        mpfr_neg(r47467, r47466, MPFR_RNDN);
        mpfr_mul(r47468, r47463, r47467, MPFR_RNDN);
        mpfr_add(r47469, r47465, r47468, MPFR_RNDN);
        return mpfr_get_d(r47469, MPFR_RNDN);
}

static mpfr_t r47470, r47471, r47472, r47473, r47474, r47475, r47476;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1680);
        mpfr_init(r47470);
        mpfr_init(r47471);
        mpfr_init(r47472);
        mpfr_init(r47473);
        mpfr_init(r47474);
        mpfr_init(r47475);
        mpfr_init(r47476);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r47470, y, MPFR_RNDN);
        mpfr_set_d(r47471, x, MPFR_RNDN);
        mpfr_mul(r47472, r47470, r47471, MPFR_RNDN);
        mpfr_set_d(r47473, z, MPFR_RNDN);
        mpfr_neg(r47474, r47473, MPFR_RNDN);
        mpfr_mul(r47475, r47470, r47474, MPFR_RNDN);
        mpfr_add(r47476, r47472, r47475, MPFR_RNDN);
        return mpfr_get_d(r47476, MPFR_RNDN);
}

