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

double f_if(float x, float y, float z) {
        float r47524 = x;
        float r47525 = y;
        float r47526 = r47524 * r47525;
        float r47527 = z;
        float r47528 = r47527 * r47527;
        float r47529 = r47526 + r47528;
        float r47530 = r47529 + r47528;
        float r47531 = r47530 + r47528;
        return r47531;
}

double f_id(double x, double y, double z) {
        double r47532 = x;
        double r47533 = y;
        double r47534 = r47532 * r47533;
        double r47535 = z;
        double r47536 = r47535 * r47535;
        double r47537 = r47534 + r47536;
        double r47538 = r47537 + r47536;
        double r47539 = r47538 + r47536;
        return r47539;
}


double f_of(float x, float y, float z) {
        float r47540 = x;
        float r47541 = y;
        float r47542 = r47540 * r47541;
        float r47543 = z;
        float r47544 = r47543 * r47543;
        float r47545 = r47542 + r47544;
        float r47546 = r47545 + r47544;
        float r47547 = r47546 + r47544;
        return r47547;
}

double f_od(double x, double y, double z) {
        double r47548 = x;
        double r47549 = y;
        double r47550 = r47548 * r47549;
        double r47551 = z;
        double r47552 = r47551 * r47551;
        double r47553 = r47550 + r47552;
        double r47554 = r47553 + r47552;
        double r47555 = r47554 + r47552;
        return r47555;
}

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 r47556, r47557, r47558, r47559, r47560, r47561, r47562, r47563;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r47556);
        mpfr_init(r47557);
        mpfr_init(r47558);
        mpfr_init(r47559);
        mpfr_init(r47560);
        mpfr_init(r47561);
        mpfr_init(r47562);
        mpfr_init(r47563);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r47556, x, MPFR_RNDN);
        mpfr_set_d(r47557, y, MPFR_RNDN);
        mpfr_mul(r47558, r47556, r47557, MPFR_RNDN);
        mpfr_set_d(r47559, z, MPFR_RNDN);
        mpfr_mul(r47560, r47559, r47559, MPFR_RNDN);
        mpfr_add(r47561, r47558, r47560, MPFR_RNDN);
        mpfr_add(r47562, r47561, r47560, MPFR_RNDN);
        mpfr_add(r47563, r47562, r47560, MPFR_RNDN);
        return mpfr_get_d(r47563, MPFR_RNDN);
}

static mpfr_t r47564, r47565, r47566, r47567, r47568, r47569, r47570, r47571;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r47564);
        mpfr_init(r47565);
        mpfr_init(r47566);
        mpfr_init(r47567);
        mpfr_init(r47568);
        mpfr_init(r47569);
        mpfr_init(r47570);
        mpfr_init(r47571);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r47564, x, MPFR_RNDN);
        mpfr_set_d(r47565, y, MPFR_RNDN);
        mpfr_mul(r47566, r47564, r47565, MPFR_RNDN);
        mpfr_set_d(r47567, z, MPFR_RNDN);
        mpfr_mul(r47568, r47567, r47567, MPFR_RNDN);
        mpfr_add(r47569, r47566, r47568, MPFR_RNDN);
        mpfr_add(r47570, r47569, r47568, MPFR_RNDN);
        mpfr_add(r47571, r47570, r47568, MPFR_RNDN);
        return mpfr_get_d(r47571, MPFR_RNDN);
}

static mpfr_t r47572, r47573, r47574, r47575, r47576, r47577, r47578, r47579;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r47572);
        mpfr_init(r47573);
        mpfr_init(r47574);
        mpfr_init(r47575);
        mpfr_init(r47576);
        mpfr_init(r47577);
        mpfr_init(r47578);
        mpfr_init(r47579);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r47572, x, MPFR_RNDN);
        mpfr_set_d(r47573, y, MPFR_RNDN);
        mpfr_mul(r47574, r47572, r47573, MPFR_RNDN);
        mpfr_set_d(r47575, z, MPFR_RNDN);
        mpfr_mul(r47576, r47575, r47575, MPFR_RNDN);
        mpfr_add(r47577, r47574, r47576, MPFR_RNDN);
        mpfr_add(r47578, r47577, r47576, MPFR_RNDN);
        mpfr_add(r47579, r47578, r47576, MPFR_RNDN);
        return mpfr_get_d(r47579, MPFR_RNDN);
}

