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

char *name = "Distance on a great circle";

double f_if(float R, float lambda1, float lambda2, float phi1, float phi2) {
        float r9563 = R;
        float r9564 = 2;
        float r9565 = phi1;
        float r9566 = phi2;
        float r9567 = r9565 - r9566;
        float r9568 = r9567 / r9564;
        float r9569 = sin(r9568);
        float r9570 = pow(r9569, r9564);
        float r9571 = cos(r9565);
        float r9572 = cos(r9566);
        float r9573 = r9571 * r9572;
        float r9574 = lambda1;
        float r9575 = lambda2;
        float r9576 = r9574 - r9575;
        float r9577 = r9576 / r9564;
        float r9578 = sin(r9577);
        float r9579 = r9573 * r9578;
        float r9580 = r9579 * r9578;
        float r9581 = r9570 + r9580;
        float r9582 = sqrt(r9581);
        float r9583 = 1;
        float r9584 = r9583 - r9581;
        float r9585 = sqrt(r9584);
        float r9586 = atan2(r9582, r9585);
        float r9587 = r9564 * r9586;
        float r9588 = r9563 * r9587;
        return r9588;
}

double f_id(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r9589 = R;
        double r9590 = 2;
        double r9591 = phi1;
        double r9592 = phi2;
        double r9593 = r9591 - r9592;
        double r9594 = r9593 / r9590;
        double r9595 = sin(r9594);
        double r9596 = pow(r9595, r9590);
        double r9597 = cos(r9591);
        double r9598 = cos(r9592);
        double r9599 = r9597 * r9598;
        double r9600 = lambda1;
        double r9601 = lambda2;
        double r9602 = r9600 - r9601;
        double r9603 = r9602 / r9590;
        double r9604 = sin(r9603);
        double r9605 = r9599 * r9604;
        double r9606 = r9605 * r9604;
        double r9607 = r9596 + r9606;
        double r9608 = sqrt(r9607);
        double r9609 = 1;
        double r9610 = r9609 - r9607;
        double r9611 = sqrt(r9610);
        double r9612 = atan2(r9608, r9611);
        double r9613 = r9590 * r9612;
        double r9614 = r9589 * r9613;
        return r9614;
}


double f_of(float R, float lambda1, float lambda2, float phi1, float phi2) {
        float r9615 = R;
        float r9616 = 2;
        float r9617 = phi1;
        float r9618 = phi2;
        float r9619 = r9617 - r9618;
        float r9620 = r9619 / r9616;
        float r9621 = sin(r9620);
        float r9622 = pow(r9621, r9616);
        float r9623 = cos(r9617);
        float r9624 = cos(r9618);
        float r9625 = r9623 * r9624;
        float r9626 = lambda1;
        float r9627 = lambda2;
        float r9628 = r9626 - r9627;
        float r9629 = r9628 / r9616;
        float r9630 = sin(r9629);
        float r9631 = r9625 * r9630;
        float r9632 = r9631 * r9630;
        float r9633 = r9622 + r9632;
        float r9634 = sqrt(r9633);
        float r9635 = 1;
        float r9636 = cbrt(r9630);
        float r9637 = r9636 * r9636;
        float r9638 = r9637 * r9636;
        float r9639 = 3;
        float r9640 = pow(r9638, r9639);
        float r9641 = cbrt(r9640);
        float r9642 = r9631 * r9641;
        float r9643 = r9622 + r9642;
        float r9644 = r9635 - r9643;
        float r9645 = sqrt(r9644);
        float r9646 = atan2(r9634, r9645);
        float r9647 = r9616 * r9646;
        float r9648 = r9615 * r9647;
        return r9648;
}

double f_od(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r9649 = R;
        double r9650 = 2;
        double r9651 = phi1;
        double r9652 = phi2;
        double r9653 = r9651 - r9652;
        double r9654 = r9653 / r9650;
        double r9655 = sin(r9654);
        double r9656 = pow(r9655, r9650);
        double r9657 = cos(r9651);
        double r9658 = cos(r9652);
        double r9659 = r9657 * r9658;
        double r9660 = lambda1;
        double r9661 = lambda2;
        double r9662 = r9660 - r9661;
        double r9663 = r9662 / r9650;
        double r9664 = sin(r9663);
        double r9665 = r9659 * r9664;
        double r9666 = r9665 * r9664;
        double r9667 = r9656 + r9666;
        double r9668 = sqrt(r9667);
        double r9669 = 1;
        double r9670 = cbrt(r9664);
        double r9671 = r9670 * r9670;
        double r9672 = r9671 * r9670;
        double r9673 = 3;
        double r9674 = pow(r9672, r9673);
        double r9675 = cbrt(r9674);
        double r9676 = r9665 * r9675;
        double r9677 = r9656 + r9676;
        double r9678 = r9669 - r9677;
        double r9679 = sqrt(r9678);
        double r9680 = atan2(r9668, r9679);
        double r9681 = r9650 * r9680;
        double r9682 = r9649 * r9681;
        return r9682;
}

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 r9683, r9684, r9685, r9686, r9687, r9688, r9689, r9690, r9691, r9692, r9693, r9694, r9695, r9696, r9697, r9698, r9699, r9700, r9701, r9702, r9703, r9704, r9705, r9706, r9707, r9708;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init(r9683);
        mpfr_init_set_str(r9684, "2", 10, MPFR_RNDN);
        mpfr_init(r9685);
        mpfr_init(r9686);
        mpfr_init(r9687);
        mpfr_init(r9688);
        mpfr_init(r9689);
        mpfr_init(r9690);
        mpfr_init(r9691);
        mpfr_init(r9692);
        mpfr_init(r9693);
        mpfr_init(r9694);
        mpfr_init(r9695);
        mpfr_init(r9696);
        mpfr_init(r9697);
        mpfr_init(r9698);
        mpfr_init(r9699);
        mpfr_init(r9700);
        mpfr_init(r9701);
        mpfr_init(r9702);
        mpfr_init_set_str(r9703, "1", 10, MPFR_RNDN);
        mpfr_init(r9704);
        mpfr_init(r9705);
        mpfr_init(r9706);
        mpfr_init(r9707);
        mpfr_init(r9708);
}

double f_im(double R, double lambda1, double lambda2, double phi1, double phi2) {
        mpfr_set_d(r9683, R, MPFR_RNDN);
        ;
        mpfr_set_d(r9685, phi1, MPFR_RNDN);
        mpfr_set_d(r9686, phi2, MPFR_RNDN);
        mpfr_sub(r9687, r9685, r9686, MPFR_RNDN);
        mpfr_div(r9688, r9687, r9684, MPFR_RNDN);
        mpfr_sin(r9689, r9688, MPFR_RNDN);
        mpfr_pow(r9690, r9689, r9684, MPFR_RNDN);
        mpfr_cos(r9691, r9685, MPFR_RNDN);
        mpfr_cos(r9692, r9686, MPFR_RNDN);
        mpfr_mul(r9693, r9691, r9692, MPFR_RNDN);
        mpfr_set_d(r9694, lambda1, MPFR_RNDN);
        mpfr_set_d(r9695, lambda2, MPFR_RNDN);
        mpfr_sub(r9696, r9694, r9695, MPFR_RNDN);
        mpfr_div(r9697, r9696, r9684, MPFR_RNDN);
        mpfr_sin(r9698, r9697, MPFR_RNDN);
        mpfr_mul(r9699, r9693, r9698, MPFR_RNDN);
        mpfr_mul(r9700, r9699, r9698, MPFR_RNDN);
        mpfr_add(r9701, r9690, r9700, MPFR_RNDN);
        mpfr_sqrt(r9702, r9701, MPFR_RNDN);
        ;
        mpfr_sub(r9704, r9703, r9701, MPFR_RNDN);
        mpfr_sqrt(r9705, r9704, MPFR_RNDN);
        mpfr_atan2(r9706, r9702, r9705, MPFR_RNDN);
        mpfr_mul(r9707, r9684, r9706, MPFR_RNDN);
        mpfr_mul(r9708, r9683, r9707, MPFR_RNDN);
        return mpfr_get_d(r9708, MPFR_RNDN);
}

static mpfr_t r9709, r9710, r9711, r9712, r9713, r9714, r9715, r9716, r9717, r9718, r9719, r9720, r9721, r9722, r9723, r9724, r9725, r9726, r9727, r9728, r9729, r9730, r9731, r9732, r9733, r9734, r9735, r9736, r9737, r9738, r9739, r9740, r9741, r9742;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r9709);
        mpfr_init_set_str(r9710, "2", 10, MPFR_RNDN);
        mpfr_init(r9711);
        mpfr_init(r9712);
        mpfr_init(r9713);
        mpfr_init(r9714);
        mpfr_init(r9715);
        mpfr_init(r9716);
        mpfr_init(r9717);
        mpfr_init(r9718);
        mpfr_init(r9719);
        mpfr_init(r9720);
        mpfr_init(r9721);
        mpfr_init(r9722);
        mpfr_init(r9723);
        mpfr_init(r9724);
        mpfr_init(r9725);
        mpfr_init(r9726);
        mpfr_init(r9727);
        mpfr_init(r9728);
        mpfr_init_set_str(r9729, "1", 10, MPFR_RNDN);
        mpfr_init(r9730);
        mpfr_init(r9731);
        mpfr_init(r9732);
        mpfr_init_set_str(r9733, "3", 10, MPFR_RNDN);
        mpfr_init(r9734);
        mpfr_init(r9735);
        mpfr_init(r9736);
        mpfr_init(r9737);
        mpfr_init(r9738);
        mpfr_init(r9739);
        mpfr_init(r9740);
        mpfr_init(r9741);
        mpfr_init(r9742);
}

double f_fm(double R, double lambda1, double lambda2, double phi1, double phi2) {
        mpfr_set_d(r9709, R, MPFR_RNDN);
        ;
        mpfr_set_d(r9711, phi1, MPFR_RNDN);
        mpfr_set_d(r9712, phi2, MPFR_RNDN);
        mpfr_sub(r9713, r9711, r9712, MPFR_RNDN);
        mpfr_div(r9714, r9713, r9710, MPFR_RNDN);
        mpfr_sin(r9715, r9714, MPFR_RNDN);
        mpfr_pow(r9716, r9715, r9710, MPFR_RNDN);
        mpfr_cos(r9717, r9711, MPFR_RNDN);
        mpfr_cos(r9718, r9712, MPFR_RNDN);
        mpfr_mul(r9719, r9717, r9718, MPFR_RNDN);
        mpfr_set_d(r9720, lambda1, MPFR_RNDN);
        mpfr_set_d(r9721, lambda2, MPFR_RNDN);
        mpfr_sub(r9722, r9720, r9721, MPFR_RNDN);
        mpfr_div(r9723, r9722, r9710, MPFR_RNDN);
        mpfr_sin(r9724, r9723, MPFR_RNDN);
        mpfr_mul(r9725, r9719, r9724, MPFR_RNDN);
        mpfr_mul(r9726, r9725, r9724, MPFR_RNDN);
        mpfr_add(r9727, r9716, r9726, MPFR_RNDN);
        mpfr_sqrt(r9728, r9727, MPFR_RNDN);
        ;
        mpfr_cbrt(r9730, r9724, MPFR_RNDN);
        mpfr_mul(r9731, r9730, r9730, MPFR_RNDN);
        mpfr_mul(r9732, r9731, r9730, MPFR_RNDN);
        ;
        mpfr_pow(r9734, r9732, r9733, MPFR_RNDN);
        mpfr_cbrt(r9735, r9734, MPFR_RNDN);
        mpfr_mul(r9736, r9725, r9735, MPFR_RNDN);
        mpfr_add(r9737, r9716, r9736, MPFR_RNDN);
        mpfr_sub(r9738, r9729, r9737, MPFR_RNDN);
        mpfr_sqrt(r9739, r9738, MPFR_RNDN);
        mpfr_atan2(r9740, r9728, r9739, MPFR_RNDN);
        mpfr_mul(r9741, r9710, r9740, MPFR_RNDN);
        mpfr_mul(r9742, r9709, r9741, MPFR_RNDN);
        return mpfr_get_d(r9742, MPFR_RNDN);
}

static mpfr_t r9743, r9744, r9745, r9746, r9747, r9748, r9749, r9750, r9751, r9752, r9753, r9754, r9755, r9756, r9757, r9758, r9759, r9760, r9761, r9762, r9763, r9764, r9765, r9766, r9767, r9768, r9769, r9770, r9771, r9772, r9773, r9774, r9775, r9776;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r9743);
        mpfr_init_set_str(r9744, "2", 10, MPFR_RNDN);
        mpfr_init(r9745);
        mpfr_init(r9746);
        mpfr_init(r9747);
        mpfr_init(r9748);
        mpfr_init(r9749);
        mpfr_init(r9750);
        mpfr_init(r9751);
        mpfr_init(r9752);
        mpfr_init(r9753);
        mpfr_init(r9754);
        mpfr_init(r9755);
        mpfr_init(r9756);
        mpfr_init(r9757);
        mpfr_init(r9758);
        mpfr_init(r9759);
        mpfr_init(r9760);
        mpfr_init(r9761);
        mpfr_init(r9762);
        mpfr_init_set_str(r9763, "1", 10, MPFR_RNDN);
        mpfr_init(r9764);
        mpfr_init(r9765);
        mpfr_init(r9766);
        mpfr_init_set_str(r9767, "3", 10, MPFR_RNDN);
        mpfr_init(r9768);
        mpfr_init(r9769);
        mpfr_init(r9770);
        mpfr_init(r9771);
        mpfr_init(r9772);
        mpfr_init(r9773);
        mpfr_init(r9774);
        mpfr_init(r9775);
        mpfr_init(r9776);
}

double f_dm(double R, double lambda1, double lambda2, double phi1, double phi2) {
        mpfr_set_d(r9743, R, MPFR_RNDN);
        ;
        mpfr_set_d(r9745, phi1, MPFR_RNDN);
        mpfr_set_d(r9746, phi2, MPFR_RNDN);
        mpfr_sub(r9747, r9745, r9746, MPFR_RNDN);
        mpfr_div(r9748, r9747, r9744, MPFR_RNDN);
        mpfr_sin(r9749, r9748, MPFR_RNDN);
        mpfr_pow(r9750, r9749, r9744, MPFR_RNDN);
        mpfr_cos(r9751, r9745, MPFR_RNDN);
        mpfr_cos(r9752, r9746, MPFR_RNDN);
        mpfr_mul(r9753, r9751, r9752, MPFR_RNDN);
        mpfr_set_d(r9754, lambda1, MPFR_RNDN);
        mpfr_set_d(r9755, lambda2, MPFR_RNDN);
        mpfr_sub(r9756, r9754, r9755, MPFR_RNDN);
        mpfr_div(r9757, r9756, r9744, MPFR_RNDN);
        mpfr_sin(r9758, r9757, MPFR_RNDN);
        mpfr_mul(r9759, r9753, r9758, MPFR_RNDN);
        mpfr_mul(r9760, r9759, r9758, MPFR_RNDN);
        mpfr_add(r9761, r9750, r9760, MPFR_RNDN);
        mpfr_sqrt(r9762, r9761, MPFR_RNDN);
        ;
        mpfr_cbrt(r9764, r9758, MPFR_RNDN);
        mpfr_mul(r9765, r9764, r9764, MPFR_RNDN);
        mpfr_mul(r9766, r9765, r9764, MPFR_RNDN);
        ;
        mpfr_pow(r9768, r9766, r9767, MPFR_RNDN);
        mpfr_cbrt(r9769, r9768, MPFR_RNDN);
        mpfr_mul(r9770, r9759, r9769, MPFR_RNDN);
        mpfr_add(r9771, r9750, r9770, MPFR_RNDN);
        mpfr_sub(r9772, r9763, r9771, MPFR_RNDN);
        mpfr_sqrt(r9773, r9772, MPFR_RNDN);
        mpfr_atan2(r9774, r9762, r9773, MPFR_RNDN);
        mpfr_mul(r9775, r9744, r9774, MPFR_RNDN);
        mpfr_mul(r9776, r9743, r9775, MPFR_RNDN);
        return mpfr_get_d(r9776, MPFR_RNDN);
}

