#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 r47543 = x;
        float r47544 = y;
        float r47545 = r47543 * r47544;
        float r47546 = z;
        float r47547 = r47546 * r47546;
        float r47548 = r47545 + r47547;
        float r47549 = r47548 + r47547;
        float r47550 = r47549 + r47547;
        return r47550;
}

double f_id(double x, double y, double z) {
        double r47551 = x;
        double r47552 = y;
        double r47553 = r47551 * r47552;
        double r47554 = z;
        double r47555 = r47554 * r47554;
        double r47556 = r47553 + r47555;
        double r47557 = r47556 + r47555;
        double r47558 = r47557 + r47555;
        return r47558;
}


double f_of(float x, float y, float z) {
        float r47559 = x;
        float r47560 = y;
        float r47561 = r47559 * r47560;
        float r47562 = z;
        float r47563 = r47562 * r47562;
        float r47564 = r47561 + r47563;
        float r47565 = r47564 + r47563;
        float r47566 = r47565 + r47563;
        return r47566;
}

double f_od(double x, double y, double z) {
        double r47567 = x;
        double r47568 = y;
        double r47569 = r47567 * r47568;
        double r47570 = z;
        double r47571 = r47570 * r47570;
        double r47572 = r47569 + r47571;
        double r47573 = r47572 + r47571;
        double r47574 = r47573 + r47571;
        return r47574;
}

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 r47575, r47576, r47577, r47578, r47579, r47580, r47581, r47582;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r47575);
        mpfr_init(r47576);
        mpfr_init(r47577);
        mpfr_init(r47578);
        mpfr_init(r47579);
        mpfr_init(r47580);
        mpfr_init(r47581);
        mpfr_init(r47582);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r47575, x, MPFR_RNDN);
        mpfr_set_d(r47576, y, MPFR_RNDN);
        mpfr_mul(r47577, r47575, r47576, MPFR_RNDN);
        mpfr_set_d(r47578, z, MPFR_RNDN);
        mpfr_mul(r47579, r47578, r47578, MPFR_RNDN);
        mpfr_add(r47580, r47577, r47579, MPFR_RNDN);
        mpfr_add(r47581, r47580, r47579, MPFR_RNDN);
        mpfr_add(r47582, r47581, r47579, MPFR_RNDN);
        return mpfr_get_d(r47582, MPFR_RNDN);
}

static mpfr_t r47583, r47584, r47585, r47586, r47587, r47588, r47589, r47590;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r47583);
        mpfr_init(r47584);
        mpfr_init(r47585);
        mpfr_init(r47586);
        mpfr_init(r47587);
        mpfr_init(r47588);
        mpfr_init(r47589);
        mpfr_init(r47590);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r47583, x, MPFR_RNDN);
        mpfr_set_d(r47584, y, MPFR_RNDN);
        mpfr_mul(r47585, r47583, r47584, MPFR_RNDN);
        mpfr_set_d(r47586, z, MPFR_RNDN);
        mpfr_mul(r47587, r47586, r47586, MPFR_RNDN);
        mpfr_add(r47588, r47585, r47587, MPFR_RNDN);
        mpfr_add(r47589, r47588, r47587, MPFR_RNDN);
        mpfr_add(r47590, r47589, r47587, MPFR_RNDN);
        return mpfr_get_d(r47590, MPFR_RNDN);
}

static mpfr_t r47591, r47592, r47593, r47594, r47595, r47596, r47597, r47598;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r47591);
        mpfr_init(r47592);
        mpfr_init(r47593);
        mpfr_init(r47594);
        mpfr_init(r47595);
        mpfr_init(r47596);
        mpfr_init(r47597);
        mpfr_init(r47598);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r47591, x, MPFR_RNDN);
        mpfr_set_d(r47592, y, MPFR_RNDN);
        mpfr_mul(r47593, r47591, r47592, MPFR_RNDN);
        mpfr_set_d(r47594, z, MPFR_RNDN);
        mpfr_mul(r47595, r47594, r47594, MPFR_RNDN);
        mpfr_add(r47596, r47593, r47595, MPFR_RNDN);
        mpfr_add(r47597, r47596, r47595, MPFR_RNDN);
        mpfr_add(r47598, r47597, r47595, MPFR_RNDN);
        return mpfr_get_d(r47598, MPFR_RNDN);
}

