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

double f_if(float x, float y, float z) {
        float r44460 = x;
        float r44461 = y;
        float r44462 = r44460 * r44461;
        float r44463 = r44461 * r44461;
        float r44464 = r44462 - r44463;
        float r44465 = r44464 + r44463;
        float r44466 = z;
        float r44467 = r44461 * r44466;
        float r44468 = r44465 - r44467;
        return r44468;
}

double f_id(double x, double y, double z) {
        double r44469 = x;
        double r44470 = y;
        double r44471 = r44469 * r44470;
        double r44472 = r44470 * r44470;
        double r44473 = r44471 - r44472;
        double r44474 = r44473 + r44472;
        double r44475 = z;
        double r44476 = r44470 * r44475;
        double r44477 = r44474 - r44476;
        return r44477;
}


double f_of(float x, float y, float z) {
        float r44478 = y;
        float r44479 = x;
        float r44480 = z;
        float r44481 = r44479 - r44480;
        float r44482 = r44478 * r44481;
        return r44482;
}

double f_od(double x, double y, double z) {
        double r44483 = y;
        double r44484 = x;
        double r44485 = z;
        double r44486 = r44484 - r44485;
        double r44487 = r44483 * r44486;
        return r44487;
}

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 r44488, r44489, r44490, r44491, r44492, r44493, r44494, r44495, r44496;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r44488);
        mpfr_init(r44489);
        mpfr_init(r44490);
        mpfr_init(r44491);
        mpfr_init(r44492);
        mpfr_init(r44493);
        mpfr_init(r44494);
        mpfr_init(r44495);
        mpfr_init(r44496);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r44488, x, MPFR_RNDN);
        mpfr_set_d(r44489, y, MPFR_RNDN);
        mpfr_mul(r44490, r44488, r44489, MPFR_RNDN);
        mpfr_mul(r44491, r44489, r44489, MPFR_RNDN);
        mpfr_sub(r44492, r44490, r44491, MPFR_RNDN);
        mpfr_add(r44493, r44492, r44491, MPFR_RNDN);
        mpfr_set_d(r44494, z, MPFR_RNDN);
        mpfr_mul(r44495, r44489, r44494, MPFR_RNDN);
        mpfr_sub(r44496, r44493, r44495, MPFR_RNDN);
        return mpfr_get_d(r44496, MPFR_RNDN);
}

static mpfr_t r44497, r44498, r44499, r44500, r44501;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r44497);
        mpfr_init(r44498);
        mpfr_init(r44499);
        mpfr_init(r44500);
        mpfr_init(r44501);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r44497, y, MPFR_RNDN);
        mpfr_set_d(r44498, x, MPFR_RNDN);
        mpfr_set_d(r44499, z, MPFR_RNDN);
        mpfr_sub(r44500, r44498, r44499, MPFR_RNDN);
        mpfr_mul(r44501, r44497, r44500, MPFR_RNDN);
        return mpfr_get_d(r44501, MPFR_RNDN);
}

static mpfr_t r44502, r44503, r44504, r44505, r44506;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r44502);
        mpfr_init(r44503);
        mpfr_init(r44504);
        mpfr_init(r44505);
        mpfr_init(r44506);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r44502, y, MPFR_RNDN);
        mpfr_set_d(r44503, x, MPFR_RNDN);
        mpfr_set_d(r44504, z, MPFR_RNDN);
        mpfr_sub(r44505, r44503, r44504, MPFR_RNDN);
        mpfr_mul(r44506, r44502, r44505, MPFR_RNDN);
        return mpfr_get_d(r44506, MPFR_RNDN);
}

