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

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

double f_if(float x, float y) {
        float r47004 = x;
        float r47005 = sin(r47004);
        float r47006 = y;
        float r47007 = sinh(r47006);
        float r47008 = r47005 * r47007;
        float r47009 = r47008 / r47004;
        return r47009;
}

double f_id(double x, double y) {
        double r47010 = x;
        double r47011 = sin(r47010);
        double r47012 = y;
        double r47013 = sinh(r47012);
        double r47014 = r47011 * r47013;
        double r47015 = r47014 / r47010;
        return r47015;
}


double f_of(float x, float y) {
        float r47016 = x;
        float r47017 = sin(r47016);
        float r47018 = y;
        float r47019 = sinh(r47018);
        float r47020 = r47019 / r47016;
        float r47021 = r47017 * r47020;
        return r47021;
}

double f_od(double x, double y) {
        double r47022 = x;
        double r47023 = sin(r47022);
        double r47024 = y;
        double r47025 = sinh(r47024);
        double r47026 = r47025 / r47022;
        double r47027 = r47023 * r47026;
        return r47027;
}

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 r47028, r47029, r47030, r47031, r47032, r47033;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r47028);
        mpfr_init(r47029);
        mpfr_init(r47030);
        mpfr_init(r47031);
        mpfr_init(r47032);
        mpfr_init(r47033);
}

double f_im(double x, double y) {
        mpfr_set_d(r47028, x, MPFR_RNDN);
        mpfr_sin(r47029, r47028, MPFR_RNDN);
        mpfr_set_d(r47030, y, MPFR_RNDN);
        mpfr_sinh(r47031, r47030, MPFR_RNDN);
        mpfr_mul(r47032, r47029, r47031, MPFR_RNDN);
        mpfr_div(r47033, r47032, r47028, MPFR_RNDN);
        return mpfr_get_d(r47033, MPFR_RNDN);
}

static mpfr_t r47034, r47035, r47036, r47037, r47038, r47039;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r47034);
        mpfr_init(r47035);
        mpfr_init(r47036);
        mpfr_init(r47037);
        mpfr_init(r47038);
        mpfr_init(r47039);
}

double f_fm(double x, double y) {
        mpfr_set_d(r47034, x, MPFR_RNDN);
        mpfr_sin(r47035, r47034, MPFR_RNDN);
        mpfr_set_d(r47036, y, MPFR_RNDN);
        mpfr_sinh(r47037, r47036, MPFR_RNDN);
        mpfr_div(r47038, r47037, r47034, MPFR_RNDN);
        mpfr_mul(r47039, r47035, r47038, MPFR_RNDN);
        return mpfr_get_d(r47039, MPFR_RNDN);
}

static mpfr_t r47040, r47041, r47042, r47043, r47044, r47045;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r47040);
        mpfr_init(r47041);
        mpfr_init(r47042);
        mpfr_init(r47043);
        mpfr_init(r47044);
        mpfr_init(r47045);
}

double f_dm(double x, double y) {
        mpfr_set_d(r47040, x, MPFR_RNDN);
        mpfr_sin(r47041, r47040, MPFR_RNDN);
        mpfr_set_d(r47042, y, MPFR_RNDN);
        mpfr_sinh(r47043, r47042, MPFR_RNDN);
        mpfr_div(r47044, r47043, r47040, MPFR_RNDN);
        mpfr_mul(r47045, r47041, r47044, MPFR_RNDN);
        return mpfr_get_d(r47045, MPFR_RNDN);
}

