#include <tgmath.h>
#include <gmp.h>
#include <mpfr.h>
#include <stdio.h>
#include <stdbool.h>

char *name = "Linear.Quaternion:$cexp from linear-1.19.1.3";

double f_if(float x, float y) {
        float r29558 = x;
        float r29559 = y;
        float r29560 = sin(r29559);
        float r29561 = r29560 / r29559;
        float r29562 = r29558 * r29561;
        return r29562;
}

double f_id(double x, double y) {
        double r29563 = x;
        double r29564 = y;
        double r29565 = sin(r29564);
        double r29566 = r29565 / r29564;
        double r29567 = r29563 * r29566;
        return r29567;
}


double f_of(float x, float y) {
        float r29568 = x;
        float r29569 = y;
        float r29570 = sin(r29569);
        float r29571 = r29570 / r29569;
        float r29572 = r29568 * r29571;
        return r29572;
}

double f_od(double x, double y) {
        double r29573 = x;
        double r29574 = y;
        double r29575 = sin(r29574);
        double r29576 = r29575 / r29574;
        double r29577 = r29573 * r29576;
        return r29577;
}

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 r29578, r29579, r29580, r29581, r29582;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r29578);
        mpfr_init(r29579);
        mpfr_init(r29580);
        mpfr_init(r29581);
        mpfr_init(r29582);
}

double f_im(double x, double y) {
        mpfr_set_d(r29578, x, MPFR_RNDN);
        mpfr_set_d(r29579, y, MPFR_RNDN);
        mpfr_sin(r29580, r29579, MPFR_RNDN);
        mpfr_div(r29581, r29580, r29579, MPFR_RNDN);
        mpfr_mul(r29582, r29578, r29581, MPFR_RNDN);
        return mpfr_get_d(r29582, MPFR_RNDN);
}

static mpfr_t r29583, r29584, r29585, r29586, r29587;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r29583);
        mpfr_init(r29584);
        mpfr_init(r29585);
        mpfr_init(r29586);
        mpfr_init(r29587);
}

double f_fm(double x, double y) {
        mpfr_set_d(r29583, x, MPFR_RNDN);
        mpfr_set_d(r29584, y, MPFR_RNDN);
        mpfr_sin(r29585, r29584, MPFR_RNDN);
        mpfr_div(r29586, r29585, r29584, MPFR_RNDN);
        mpfr_mul(r29587, r29583, r29586, MPFR_RNDN);
        return mpfr_get_d(r29587, MPFR_RNDN);
}

static mpfr_t r29588, r29589, r29590, r29591, r29592;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r29588);
        mpfr_init(r29589);
        mpfr_init(r29590);
        mpfr_init(r29591);
        mpfr_init(r29592);
}

double f_dm(double x, double y) {
        mpfr_set_d(r29588, x, MPFR_RNDN);
        mpfr_set_d(r29589, y, MPFR_RNDN);
        mpfr_sin(r29590, r29589, MPFR_RNDN);
        mpfr_div(r29591, r29590, r29589, MPFR_RNDN);
        mpfr_mul(r29592, r29588, r29591, MPFR_RNDN);
        return mpfr_get_d(r29592, MPFR_RNDN);
}

