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

char *name = "math.sin on complex, imaginary part";

double f_if(float re, float im) {
        float r62533778 = 0.5;
        float r62533779 = re;
        float r62533780 = cos(r62533779);
        float r62533781 = r62533778 * r62533780;
        float r62533782 = 0;
        float r62533783 = im;
        float r62533784 = r62533782 - r62533783;
        float r62533785 = exp(r62533784);
        float r62533786 = exp(r62533783);
        float r62533787 = r62533785 - r62533786;
        float r62533788 = r62533781 * r62533787;
        return r62533788;
}

double f_id(double re, double im) {
        double r62533789 = 0.5;
        double r62533790 = re;
        double r62533791 = cos(r62533790);
        double r62533792 = r62533789 * r62533791;
        double r62533793 = 0;
        double r62533794 = im;
        double r62533795 = r62533793 - r62533794;
        double r62533796 = exp(r62533795);
        double r62533797 = exp(r62533794);
        double r62533798 = r62533796 - r62533797;
        double r62533799 = r62533792 * r62533798;
        return r62533799;
}


double f_of(float re, float im) {
        float r62533800 = 0.5;
        float r62533801 = re;
        float r62533802 = cos(r62533801);
        float r62533803 = r62533800 * r62533802;
        float r62533804 = 1/60;
        float r62533805 = im;
        float r62533806 = 5;
        float r62533807 = pow(r62533805, r62533806);
        float r62533808 = r62533804 * r62533807;
        float r62533809 = 1/3;
        float r62533810 = 3;
        float r62533811 = pow(r62533805, r62533810);
        float r62533812 = r62533809 * r62533811;
        float r62533813 = 2;
        float r62533814 = r62533813 * r62533805;
        float r62533815 = r62533812 + r62533814;
        float r62533816 = r62533808 + r62533815;
        float r62533817 = -r62533816;
        float r62533818 = r62533803 * r62533817;
        return r62533818;
}

double f_od(double re, double im) {
        double r62533819 = 0.5;
        double r62533820 = re;
        double r62533821 = cos(r62533820);
        double r62533822 = r62533819 * r62533821;
        double r62533823 = 1/60;
        double r62533824 = im;
        double r62533825 = 5;
        double r62533826 = pow(r62533824, r62533825);
        double r62533827 = r62533823 * r62533826;
        double r62533828 = 1/3;
        double r62533829 = 3;
        double r62533830 = pow(r62533824, r62533829);
        double r62533831 = r62533828 * r62533830;
        double r62533832 = 2;
        double r62533833 = r62533832 * r62533824;
        double r62533834 = r62533831 + r62533833;
        double r62533835 = r62533827 + r62533834;
        double r62533836 = -r62533835;
        double r62533837 = r62533822 * r62533836;
        return r62533837;
}

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 r62533838, r62533839, r62533840, r62533841, r62533842, r62533843, r62533844, r62533845, r62533846, r62533847, r62533848;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init_set_str(r62533838, "0.5", 10, MPFR_RNDN);
        mpfr_init(r62533839);
        mpfr_init(r62533840);
        mpfr_init(r62533841);
        mpfr_init_set_str(r62533842, "0", 10, MPFR_RNDN);
        mpfr_init(r62533843);
        mpfr_init(r62533844);
        mpfr_init(r62533845);
        mpfr_init(r62533846);
        mpfr_init(r62533847);
        mpfr_init(r62533848);
}

double f_im(double re, double im) {
        ;
        mpfr_set_d(r62533839, re, MPFR_RNDN);
        mpfr_cos(r62533840, r62533839, MPFR_RNDN);
        mpfr_mul(r62533841, r62533838, r62533840, MPFR_RNDN);
        ;
        mpfr_set_d(r62533843, im, MPFR_RNDN);
        mpfr_sub(r62533844, r62533842, r62533843, MPFR_RNDN);
        mpfr_exp(r62533845, r62533844, MPFR_RNDN);
        mpfr_exp(r62533846, r62533843, MPFR_RNDN);
        mpfr_sub(r62533847, r62533845, r62533846, MPFR_RNDN);
        mpfr_mul(r62533848, r62533841, r62533847, MPFR_RNDN);
        return mpfr_get_d(r62533848, MPFR_RNDN);
}

static mpfr_t r62533849, r62533850, r62533851, r62533852, r62533853, r62533854, r62533855, r62533856, r62533857, r62533858, r62533859, r62533860, r62533861, r62533862, r62533863, r62533864, r62533865, r62533866, r62533867;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init_set_str(r62533849, "0.5", 10, MPFR_RNDN);
        mpfr_init(r62533850);
        mpfr_init(r62533851);
        mpfr_init(r62533852);
        mpfr_init_set_str(r62533853, "1/60", 10, MPFR_RNDN);
        mpfr_init(r62533854);
        mpfr_init_set_str(r62533855, "5", 10, MPFR_RNDN);
        mpfr_init(r62533856);
        mpfr_init(r62533857);
        mpfr_init_set_str(r62533858, "1/3", 10, MPFR_RNDN);
        mpfr_init_set_str(r62533859, "3", 10, MPFR_RNDN);
        mpfr_init(r62533860);
        mpfr_init(r62533861);
        mpfr_init_set_str(r62533862, "2", 10, MPFR_RNDN);
        mpfr_init(r62533863);
        mpfr_init(r62533864);
        mpfr_init(r62533865);
        mpfr_init(r62533866);
        mpfr_init(r62533867);
}

double f_fm(double re, double im) {
        ;
        mpfr_set_d(r62533850, re, MPFR_RNDN);
        mpfr_cos(r62533851, r62533850, MPFR_RNDN);
        mpfr_mul(r62533852, r62533849, r62533851, MPFR_RNDN);
        ;
        mpfr_set_d(r62533854, im, MPFR_RNDN);
        ;
        mpfr_pow(r62533856, r62533854, r62533855, MPFR_RNDN);
        mpfr_mul(r62533857, r62533853, r62533856, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r62533860, r62533854, r62533859, MPFR_RNDN);
        mpfr_mul(r62533861, r62533858, r62533860, MPFR_RNDN);
        ;
        mpfr_mul(r62533863, r62533862, r62533854, MPFR_RNDN);
        mpfr_add(r62533864, r62533861, r62533863, MPFR_RNDN);
        mpfr_add(r62533865, r62533857, r62533864, MPFR_RNDN);
        mpfr_neg(r62533866, r62533865, MPFR_RNDN);
        mpfr_mul(r62533867, r62533852, r62533866, MPFR_RNDN);
        return mpfr_get_d(r62533867, MPFR_RNDN);
}

static mpfr_t r62533868, r62533869, r62533870, r62533871, r62533872, r62533873, r62533874, r62533875, r62533876, r62533877, r62533878, r62533879, r62533880, r62533881, r62533882, r62533883, r62533884, r62533885, r62533886;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init_set_str(r62533868, "0.5", 10, MPFR_RNDN);
        mpfr_init(r62533869);
        mpfr_init(r62533870);
        mpfr_init(r62533871);
        mpfr_init_set_str(r62533872, "1/60", 10, MPFR_RNDN);
        mpfr_init(r62533873);
        mpfr_init_set_str(r62533874, "5", 10, MPFR_RNDN);
        mpfr_init(r62533875);
        mpfr_init(r62533876);
        mpfr_init_set_str(r62533877, "1/3", 10, MPFR_RNDN);
        mpfr_init_set_str(r62533878, "3", 10, MPFR_RNDN);
        mpfr_init(r62533879);
        mpfr_init(r62533880);
        mpfr_init_set_str(r62533881, "2", 10, MPFR_RNDN);
        mpfr_init(r62533882);
        mpfr_init(r62533883);
        mpfr_init(r62533884);
        mpfr_init(r62533885);
        mpfr_init(r62533886);
}

double f_dm(double re, double im) {
        ;
        mpfr_set_d(r62533869, re, MPFR_RNDN);
        mpfr_cos(r62533870, r62533869, MPFR_RNDN);
        mpfr_mul(r62533871, r62533868, r62533870, MPFR_RNDN);
        ;
        mpfr_set_d(r62533873, im, MPFR_RNDN);
        ;
        mpfr_pow(r62533875, r62533873, r62533874, MPFR_RNDN);
        mpfr_mul(r62533876, r62533872, r62533875, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r62533879, r62533873, r62533878, MPFR_RNDN);
        mpfr_mul(r62533880, r62533877, r62533879, MPFR_RNDN);
        ;
        mpfr_mul(r62533882, r62533881, r62533873, MPFR_RNDN);
        mpfr_add(r62533883, r62533880, r62533882, MPFR_RNDN);
        mpfr_add(r62533884, r62533876, r62533883, MPFR_RNDN);
        mpfr_neg(r62533885, r62533884, MPFR_RNDN);
        mpfr_mul(r62533886, r62533871, r62533885, MPFR_RNDN);
        return mpfr_get_d(r62533886, MPFR_RNDN);
}

