// File: /workspace/github_cpp_makefile_star2_O1/jkingan[P]ladyheather/heathmsc.cpp
// Function: nutation(double)
double nutation(double JD)
{
double T, T2, T3, DegToRad;
double w, w1, w2, w3, w4, w5;
   
   // Code derived from code by Jay Tanner

   // ---------------------------------
   // Compute (T) in Julian centuries
   // from J2000.0 and powers of (T).

   T = (JD - JD2000) / 36525.0;
   T2 = T * T;
   T3 = T * T2;

   // ------------------------------------------------
   // Define conversion factor for degrees to radians.
   // Multiply degrees by this factor to get radians.

   DegToRad = PI / 180.0;

   // -----------------------------------------------
   // Compute mean elongation of the moon in radians.

   w1 = DegToRad*(297.85036 + 445267.11148*T
      - 0.0019142*T2 + (T3 / 189474.0));

   // -------------------------------------------
   // Compute mean anomaly of the sun in radians.

   w2 = DegToRad*(357.52772 + 35999.05034*T
      - 0.0001603*T2 - (T3 / 300000.0));

   // --------------------------------------------
   // Compute mean anomaly of the moon in radians.

   w3 = DegToRad*(134.96298 + 477198.867398*T
      + 0.0086972*T2 + (T3 / 56250.0));

   // -----------------------------------------------
   // Compute moon's argument of latitude in radians.

   w4 = DegToRad*(93.27191 + 483202.017538*T
      - 0.0036825*T2 + (T3 / 327270.0));

   // ------------------------------------------------------
   // Compute longitude of moon's ascending node in radians.

   w5 = DegToRad*(125.04452 - 1934.136261*T
      + 0.0020708*T2 + (T3 / 450000.0));

   // ---------------------------------------------
   // Compute the nutation in obliquity in terms of
   // arc seconds * 10000

   w  = cos(w5)*(92025.0 + 8.9*T);

   w += cos(2.0*(w4 - w1 + w5))*(5736.0 - 3.1*T);
   w += cos(2.0*(w4 + w5))*(977.0 - 0.5*T);
   w += cos(2.0*w5)*(0.5*T - 895.0);
   w += cos(w2)*(54.0 - 0.1*T);
   w -= 7.0*cos(w3);
   w += cos(w2 + 2.0*(w4 - w1 + w5))*(224.0 - 0.6*T);
   w += 200.0*cos(2.0*w4 + w5);
   w += cos(w3 + 2.0*(w4 + w5))*(129.0 - 0.1*T);
   w += cos(2.0*(w4 - w1 + w5) - w2)*(0.3*T - 95.0);
   w -= 70.0*cos(2.0*(w4 - w1) + w5);
   w -= 53.0*cos(2.0*(w4 + w5) - w3);
   w -= 33.0*cos(w3 + w5);
   w += 26.0*cos(2.0*(w1 + w4 + w5) - w3);
   w += 32.0*cos(w5 - w3);
   w += 27.0*cos(w3 + 2.0*w4 + w5);
   w -= 24.0*cos(2.0*(w4 - w3) + w5);
   w += 16.0*cos(2.0*(w1 + w4 + w5));
   w += 13.0*cos(2.0*(w3 + w4 + w5));
   w -= 12.0*cos(w3 + 2.0*(w4 - w1 + w5));
   w -= 10.0*cos(2.0*w4 + w5 - w3);
   w -= 8.0*cos(2.0*w1 - w3 + w5);
   w += 7.0*cos(2.0*(w2 - w1 + w4 + w5));
   w += 9.0*cos(w2 + w5);
   w += 7.0*cos(w3 + w5 - 2.0*w1);
   w += 6.0*cos(w5 - w2);
   w += 5.0*cos(2.0*(w1 + w4) - w3 + w5);
   w += 3.0*cos(w3 + 2.0*(w4 + w1 + w5));
   w -= 3.0*cos(w2 + 2.0*(w4 + w5));
   w += 3.0*cos(2.0*(w4 + w5) - w2);
   w += 3.0*cos(2.0*(w1 + w4) + w5);
   w -= 3.0*cos(2.0*(w3 + w4 + w5 - w1));
   w -= 3.0*cos(w3 + 2.0*(w4 - w1) + w5);
   w += 3.0*cos(2.0*(w1 - w3) + w5);
   w += 3.0*cos(2.0*w1 + w5);
   w += 3.0*cos(2.0*(w4 - w1) + w5 - w2);
   w += 3.0*cos(w5 - 2.0*w1);
   w += 3.0*cos(2.0*(w3 + w4) + w5);

   // -----------------------------------
   // Done.  Return nutation in obliquity
   // expressed in decimal degrees.

   return w / 36000000.0;

}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x80, %rsp
addsd 0x4b78e(%rip), %xmm0    # 0x12b750
divsd 0x4b78e(%rip), %xmm0    # 0x12b758
movapd %xmm0, %xmm4
mulsd %xmm0, %xmm4
movapd %xmm0, %xmm5
mulsd %xmm4, %xmm5
movsd 0x4b79e(%rip), %xmm1    # 0x12b780
mulsd %xmm0, %xmm1
addsd 0x4b79a(%rip), %xmm1    # 0x12b788
movsd 0x4b79a(%rip), %xmm2    # 0x12b790
mulsd %xmm4, %xmm2
addsd %xmm1, %xmm2
movapd %xmm5, %xmm1
divsd 0x4b78e(%rip), %xmm1    # 0x12b798
addsd %xmm2, %xmm1
movapd %xmm1, %xmm3
movsd 0x2b8ee(%rip), %xmm1    # 0x10b908
movsd 0x4b73e(%rip), %xmm2    # 0x12b760
mulsd %xmm0, %xmm2
addsd 0x4b73a(%rip), %xmm2    # 0x12b768
mulsd %xmm1, %xmm3
movsd %xmm3, -0x68(%rbp)
movsd 0x4b731(%rip), %xmm3    # 0x12b770
mulsd %xmm4, %xmm3
addsd %xmm2, %xmm3
movapd %xmm5, %xmm2
divsd 0x4b725(%rip), %xmm2    # 0x12b778
addsd %xmm3, %xmm2
movapd %xmm2, %xmm3
movsd 0x4b73d(%rip), %xmm2    # 0x12b7a0
mulsd %xmm0, %xmm2
addsd 0x4b739(%rip), %xmm2    # 0x12b7a8
mulsd %xmm1, %xmm3
movsd %xmm3, -0x40(%rbp)
movsd 0x4b730(%rip), %xmm3    # 0x12b7b0
mulsd %xmm4, %xmm3
addsd %xmm2, %xmm3
movapd %xmm5, %xmm2
divsd 0x4b724(%rip), %xmm2    # 0x12b7b8
addsd %xmm3, %xmm2
movapd %xmm2, %xmm3
movsd 0x4b71c(%rip), %xmm2    # 0x12b7c0
mulsd %xmm0, %xmm2
movsd %xmm0, -0x10(%rbp)
addsd 0x4b713(%rip), %xmm2    # 0x12b7c8
mulsd %xmm1, %xmm3
movsd %xmm3, -0x8(%rbp)
movsd 0x4b70a(%rip), %xmm3    # 0x12b7d0
mulsd %xmm4, %xmm3
addsd %xmm2, %xmm3
movapd %xmm5, %xmm2
divsd 0x4b6fe(%rip), %xmm2    # 0x12b7d8
addsd %xmm3, %xmm2
movapd %xmm2, %xmm3
movsd 0x4b6f6(%rip), %xmm2    # 0x12b7e0
mulsd %xmm0, %xmm2
addsd 0x4b6f2(%rip), %xmm2    # 0x12b7e8
mulsd %xmm1, %xmm3
movsd %xmm3, -0x38(%rbp)
mulsd 0x4b6e9(%rip), %xmm4    # 0x12b7f0
addsd %xmm2, %xmm4
movapd %xmm5, %xmm0
divsd 0x4b6e1(%rip), %xmm0    # 0x12b7f8
addsd %xmm4, %xmm0
mulsd %xmm1, %xmm0
movsd %xmm0, -0x18(%rbp)
callq 0x9710
movsd 0x4b6cf(%rip), %xmm1    # 0x12b800
mulsd -0x10(%rbp), %xmm1
addsd 0x4b6ca(%rip), %xmm1    # 0x12b808
mulsd %xmm1, %xmm0
movsd %xmm0, -0x48(%rbp)
movsd -0x38(%rbp), %xmm1
subsd -0x68(%rbp), %xmm1
movsd %xmm1, -0x78(%rbp)
movsd -0x18(%rbp), %xmm0
addsd %xmm1, %xmm0
addsd %xmm0, %xmm0
movsd %xmm0, -0x60(%rbp)
callq 0x9710
movsd 0x4b69b(%rip), %xmm1    # 0x12b810
mulsd -0x10(%rbp), %xmm1
addsd 0x4b696(%rip), %xmm1    # 0x12b818
mulsd %xmm1, %xmm0
addsd -0x48(%rbp), %xmm0
movsd %xmm0, -0x20(%rbp)
movsd -0x38(%rbp), %xmm0
addsd -0x18(%rbp), %xmm0
addsd %xmm0, %xmm0
movsd %xmm0, -0x48(%rbp)
callq 0x9710
movsd 0x2b7d0(%rip), %xmm1    # 0x10b980
mulsd -0x10(%rbp), %xmm1
addsd 0x4b663(%rip), %xmm1    # 0x12b820
mulsd %xmm1, %xmm0
addsd -0x20(%rbp), %xmm0
movsd %xmm0, -0x20(%rbp)
movsd -0x18(%rbp), %xmm0
addsd %xmm0, %xmm0
callq 0x9710
movsd 0x28e87(%rip), %xmm1    # 0x109068
mulsd -0x10(%rbp), %xmm1
addsd 0x4b63a(%rip), %xmm1    # 0x12b828
mulsd %xmm1, %xmm0
addsd -0x20(%rbp), %xmm0
movsd %xmm0, -0x30(%rbp)
movsd -0x40(%rbp), %xmm0
callq 0x9710
movsd 0x4b622(%rip), %xmm1    # 0x12b830
mulsd -0x10(%rbp), %xmm1
movsd %xmm1, -0x20(%rbp)
movsd 0x4b618(%rip), %xmm2    # 0x12b838
addsd %xmm1, %xmm2
mulsd %xmm2, %xmm0
addsd -0x30(%rbp), %xmm0
movsd %xmm0, -0x30(%rbp)
movsd -0x8(%rbp), %xmm0
callq 0x9710
mulsd 0x4b5fc(%rip), %xmm0    # 0x12b840
addsd -0x30(%rbp), %xmm0
movsd %xmm0, -0x30(%rbp)
movsd -0x60(%rbp), %xmm0
addsd -0x40(%rbp), %xmm0
callq 0x9710
movsd 0x4b5e3(%rip), %xmm1    # 0x12b848
mulsd -0x10(%rbp), %xmm1
addsd 0x4b5de(%rip), %xmm1    # 0x12b850
mulsd %xmm1, %xmm0
addsd -0x30(%rbp), %xmm0
movsd %xmm0, -0x30(%rbp)
movsd -0x38(%rbp), %xmm0
addsd %xmm0, %xmm0
movsd %xmm0, -0x58(%rbp)
addsd -0x18(%rbp), %xmm0
movsd %xmm0, -0x28(%rbp)
callq 0x9710
mulsd 0x2b85b(%rip), %xmm0    # 0x10bb00
addsd -0x30(%rbp), %xmm0
movsd %xmm0, -0x30(%rbp)
movsd -0x48(%rbp), %xmm0
addsd -0x8(%rbp), %xmm0
callq 0x9710
movsd -0x20(%rbp), %xmm1
addsd 0x4b58d(%rip), %xmm1    # 0x12b858
mulsd %xmm1, %xmm0
addsd -0x30(%rbp), %xmm0
movsd %xmm0, -0x20(%rbp)
movsd -0x60(%rbp), %xmm0
subsd -0x40(%rbp), %xmm0
callq 0x9710
movsd -0x10(%rbp), %xmm1
mulsd 0x3e083(%rip), %xmm1    # 0x11e378
addsd 0x4b563(%rip), %xmm1    # 0x12b860
mulsd %xmm1, %xmm0
addsd -0x20(%rbp), %xmm0
movsd %xmm0, -0x10(%rbp)
movsd -0x78(%rbp), %xmm0
addsd %xmm0, %xmm0
movsd %xmm0, -0x78(%rbp)
addsd -0x18(%rbp), %xmm0
movsd %xmm0, -0x30(%rbp)
callq 0x9710
mulsd 0x4b538(%rip), %xmm0    # 0x12b868
addsd -0x10(%rbp), %xmm0
movsd %xmm0, -0x10(%rbp)
movsd -0x48(%rbp), %xmm0
subsd -0x8(%rbp), %xmm0
callq 0x9710
mulsd 0x4b51f(%rip), %xmm0    # 0x12b870
addsd -0x10(%rbp), %xmm0
movsd %xmm0, -0x10(%rbp)
movsd -0x8(%rbp), %xmm0
addsd -0x18(%rbp), %xmm0
movsd %xmm0, -0x80(%rbp)
callq 0x9710
mulsd 0x4b501(%rip), %xmm0    # 0x12b878
addsd -0x10(%rbp), %xmm0
movsd %xmm0, -0x50(%rbp)
movsd -0x68(%rbp), %xmm1
addsd -0x38(%rbp), %xmm1
movsd %xmm1, -0x10(%rbp)
movsd -0x18(%rbp), %xmm0
addsd %xmm1, %xmm0
addsd %xmm0, %xmm0
movsd %xmm0, -0x20(%rbp)
subsd -0x8(%rbp), %xmm0
callq 0x9710
mulsd 0x4b4cc(%rip), %xmm0    # 0x12b880
addsd -0x50(%rbp), %xmm0
movsd %xmm0, -0x50(%rbp)
movsd -0x18(%rbp), %xmm0
subsd -0x8(%rbp), %xmm0
callq 0x9710
mulsd 0x28cdb(%rip), %xmm0    # 0x1090b0
addsd -0x50(%rbp), %xmm0
movsd %xmm0, -0x50(%rbp)
movsd -0x58(%rbp), %xmm0
addsd -0x8(%rbp), %xmm0
addsd -0x18(%rbp), %xmm0
callq 0x9710
mulsd 0x4b48d(%rip), %xmm0    # 0x12b888
addsd -0x50(%rbp), %xmm0
movsd %xmm0, -0x58(%rbp)
movsd -0x38(%rbp), %xmm0
subsd -0x8(%rbp), %xmm0
addsd %xmm0, %xmm0
addsd -0x18(%rbp), %xmm0
callq 0x9710
mulsd 0x3e42b(%rip), %xmm0    # 0x11e850
addsd -0x58(%rbp), %xmm0
movsd %xmm0, -0x58(%rbp)
movsd -0x20(%rbp), %xmm0
callq 0x9710
mulsd 0x2b3ff(%rip), %xmm0    # 0x10b840
addsd -0x58(%rbp), %xmm0
movsd %xmm0, -0x70(%rbp)
movsd -0x8(%rbp), %xmm0
addsd -0x38(%rbp), %xmm0
movsd %xmm0, -0x58(%rbp)
movsd -0x18(%rbp), %xmm1
addsd %xmm0, %xmm1
movsd %xmm1, -0x50(%rbp)
movapd %xmm1, %xmm0
addsd %xmm1, %xmm0
callq 0x9710
mulsd 0x4b413(%rip), %xmm0    # 0x12b890
addsd -0x70(%rbp), %xmm0
movsd %xmm0, -0x70(%rbp)
movsd -0x60(%rbp), %xmm0
addsd -0x8(%rbp), %xmm0
callq 0x9710
mulsd 0x4b3fa(%rip), %xmm0    # 0x12b898
addsd -0x70(%rbp), %xmm0
movsd %xmm0, -0x60(%rbp)
movsd -0x28(%rbp), %xmm0
subsd -0x8(%rbp), %xmm0
callq 0x9710
mulsd 0x28c31(%rip), %xmm0    # 0x1090f0
addsd -0x60(%rbp), %xmm0
movsd %xmm0, -0x28(%rbp)
movsd -0x68(%rbp), %xmm0
addsd %xmm0, %xmm0
movsd %xmm0, -0x60(%rbp)
subsd -0x8(%rbp), %xmm0
addsd -0x18(%rbp), %xmm0
callq 0x9710
mulsd 0x3e352(%rip), %xmm0    # 0x11e840
addsd -0x28(%rbp), %xmm0
movsd %xmm0, -0x28(%rbp)
movsd -0x40(%rbp), %xmm0
subsd -0x68(%rbp), %xmm0
addsd -0x38(%rbp), %xmm0
addsd -0x18(%rbp), %xmm0
addsd %xmm0, %xmm0
callq 0x9710
mulsd 0x2b3e3(%rip), %xmm0    # 0x10b900
addsd -0x28(%rbp), %xmm0
movsd %xmm0, -0x38(%rbp)
movsd -0x40(%rbp), %xmm0
addsd -0x18(%rbp), %xmm0
callq 0x9710
mulsd 0x3e21a(%rip), %xmm0    # 0x11e758
addsd -0x38(%rbp), %xmm0
movsd %xmm0, -0x28(%rbp)
movsd 0x2b4d0(%rip), %xmm1    # 0x10ba20
mulsd -0x68(%rbp), %xmm1
movsd %xmm1, -0x38(%rbp)
movsd -0x80(%rbp), %xmm0
addsd %xmm1, %xmm0
callq 0x9710
mulsd 0x2b390(%rip), %xmm0    # 0x10b900
addsd -0x28(%rbp), %xmm0
movsd %xmm0, -0x28(%rbp)
movsd -0x18(%rbp), %xmm0
subsd -0x40(%rbp), %xmm0
callq 0x9710
mulsd 0x3e15f(%rip), %xmm0    # 0x11e6f0
addsd -0x28(%rbp), %xmm0
movsd %xmm0, -0x28(%rbp)
movsd -0x10(%rbp), %xmm0
addsd %xmm0, %xmm0
movsd %xmm0, -0x10(%rbp)
subsd -0x8(%rbp), %xmm0
addsd -0x18(%rbp), %xmm0
callq 0x9710
mulsd 0x28b78(%rip), %xmm0    # 0x109138
addsd -0x28(%rbp), %xmm0
movsd %xmm0, -0x28(%rbp)
movsd -0x20(%rbp), %xmm0
addsd -0x8(%rbp), %xmm0
callq 0x9710
mulsd 0x2b427(%rip), %xmm0    # 0x10ba08
addsd -0x28(%rbp), %xmm0
movsd %xmm0, -0x20(%rbp)
movsd -0x48(%rbp), %xmm0
addsd -0x40(%rbp), %xmm0
callq 0x9710
mulsd 0x4b29e(%rip), %xmm0    # 0x12b8a0
addsd -0x20(%rbp), %xmm0
movsd %xmm0, -0x20(%rbp)
movsd -0x48(%rbp), %xmm0
subsd -0x40(%rbp), %xmm0
callq 0x9710
mulsd 0x2b3e5(%rip), %xmm0    # 0x10ba08
addsd -0x20(%rbp), %xmm0
movsd %xmm0, -0x48(%rbp)
movsd -0x10(%rbp), %xmm0
addsd -0x18(%rbp), %xmm0
callq 0x9710
mulsd 0x2b3c4(%rip), %xmm0    # 0x10ba08
addsd -0x48(%rbp), %xmm0
movsd %xmm0, -0x10(%rbp)
movsd -0x50(%rbp), %xmm0
subsd -0x68(%rbp), %xmm0
addsd %xmm0, %xmm0
callq 0x9710
mulsd 0x4b237(%rip), %xmm0    # 0x12b8a0
addsd -0x10(%rbp), %xmm0
movsd %xmm0, -0x10(%rbp)
movsd -0x78(%rbp), %xmm0
addsd -0x8(%rbp), %xmm0
addsd -0x18(%rbp), %xmm0
callq 0x9710
mulsd 0x4b211(%rip), %xmm0    # 0x12b8a0
addsd -0x10(%rbp), %xmm0
movsd %xmm0, -0x10(%rbp)
movsd -0x68(%rbp), %xmm0
subsd -0x8(%rbp), %xmm0
addsd %xmm0, %xmm0
addsd -0x18(%rbp), %xmm0
callq 0x9710
mulsd 0x2b34f(%rip), %xmm0    # 0x10ba08
addsd -0x10(%rbp), %xmm0
movsd %xmm0, -0x8(%rbp)
movsd -0x60(%rbp), %xmm0
addsd -0x18(%rbp), %xmm0
callq 0x9710
mulsd 0x2b32e(%rip), %xmm0    # 0x10ba08
addsd -0x8(%rbp), %xmm0
movsd %xmm0, -0x8(%rbp)
movsd -0x30(%rbp), %xmm0
subsd -0x40(%rbp), %xmm0
callq 0x9710
mulsd 0x2b30d(%rip), %xmm0    # 0x10ba08
addsd -0x8(%rbp), %xmm0
movsd %xmm0, -0x8(%rbp)
movsd -0x38(%rbp), %xmm0
addsd -0x18(%rbp), %xmm0
callq 0x9710
mulsd 0x2b2ec(%rip), %xmm0    # 0x10ba08
addsd -0x8(%rbp), %xmm0
movsd %xmm0, -0x8(%rbp)
movsd -0x58(%rbp), %xmm0
addsd %xmm0, %xmm0
addsd -0x18(%rbp), %xmm0
callq 0x9710
mulsd 0x2b2c7(%rip), %xmm0    # 0x10ba08
addsd -0x8(%rbp), %xmm0
divsd 0x4b15a(%rip), %xmm0    # 0x12b8a8
addq $0x80, %rsp
popq %rbp
retq