// File: /workspace/github_cpp_makefile_star2_O3/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 0x4adb0(%rip), %xmm0    # 0x12b830
divsd 0x4adb0(%rip), %xmm0    # 0x12b838
movapd %xmm0, %xmm4
mulsd %xmm0, %xmm4
movapd %xmm0, %xmm5
mulsd %xmm4, %xmm5
movsd 0x4adc0(%rip), %xmm1    # 0x12b860
mulsd %xmm0, %xmm1
addsd 0x4adbc(%rip), %xmm1    # 0x12b868
movsd 0x4adbc(%rip), %xmm2    # 0x12b870
mulsd %xmm4, %xmm2
addsd %xmm1, %xmm2
movapd %xmm5, %xmm1
divsd 0x4adb0(%rip), %xmm1    # 0x12b878
addsd %xmm2, %xmm1
movapd %xmm1, %xmm3
movsd 0x2ae38(%rip), %xmm1    # 0x10b910
movsd 0x4ad60(%rip), %xmm2    # 0x12b840
mulsd %xmm0, %xmm2
addsd 0x4ad5c(%rip), %xmm2    # 0x12b848
mulsd %xmm1, %xmm3
movsd %xmm3, -0x68(%rbp)
movsd 0x4ad53(%rip), %xmm3    # 0x12b850
mulsd %xmm4, %xmm3
addsd %xmm2, %xmm3
movapd %xmm5, %xmm2
divsd 0x4ad47(%rip), %xmm2    # 0x12b858
addsd %xmm3, %xmm2
movapd %xmm2, %xmm3
movsd 0x4ad5f(%rip), %xmm2    # 0x12b880
mulsd %xmm0, %xmm2
addsd 0x4ad5b(%rip), %xmm2    # 0x12b888
mulsd %xmm1, %xmm3
movsd %xmm3, -0x40(%rbp)
movsd 0x4ad52(%rip), %xmm3    # 0x12b890
mulsd %xmm4, %xmm3
addsd %xmm2, %xmm3
movapd %xmm5, %xmm2
divsd 0x4ad46(%rip), %xmm2    # 0x12b898
addsd %xmm3, %xmm2
movapd %xmm2, %xmm3
movsd 0x4ad3e(%rip), %xmm2    # 0x12b8a0
mulsd %xmm0, %xmm2
movsd %xmm0, -0x10(%rbp)
addsd 0x4ad35(%rip), %xmm2    # 0x12b8a8
mulsd %xmm1, %xmm3
movsd %xmm3, -0x8(%rbp)
movsd 0x4ad2c(%rip), %xmm3    # 0x12b8b0
mulsd %xmm4, %xmm3
addsd %xmm2, %xmm3
movapd %xmm5, %xmm2
divsd 0x4ad20(%rip), %xmm2    # 0x12b8b8
addsd %xmm3, %xmm2
movapd %xmm2, %xmm3
movsd 0x4ad18(%rip), %xmm2    # 0x12b8c0
mulsd %xmm0, %xmm2
addsd 0x4ad14(%rip), %xmm2    # 0x12b8c8
mulsd %xmm1, %xmm3
movsd %xmm3, -0x38(%rbp)
mulsd 0x4ad0b(%rip), %xmm4    # 0x12b8d0
addsd %xmm2, %xmm4
movapd %xmm5, %xmm0
divsd 0x4ad03(%rip), %xmm0    # 0x12b8d8
addsd %xmm4, %xmm0
mulsd %xmm1, %xmm0
movsd %xmm0, -0x18(%rbp)
callq 0x9710
movsd 0x4acf1(%rip), %xmm1    # 0x12b8e0
mulsd -0x10(%rbp), %xmm1
addsd 0x4acec(%rip), %xmm1    # 0x12b8e8
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 0x4acbd(%rip), %xmm1    # 0x12b8f0
mulsd -0x10(%rbp), %xmm1
addsd 0x4acb8(%rip), %xmm1    # 0x12b8f8
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 0x2ad1a(%rip), %xmm1    # 0x10b988
mulsd -0x10(%rbp), %xmm1
addsd 0x4ac85(%rip), %xmm1    # 0x12b900
mulsd %xmm1, %xmm0
addsd -0x20(%rbp), %xmm0
movsd %xmm0, -0x20(%rbp)
movsd -0x18(%rbp), %xmm0
addsd %xmm0, %xmm0
callq 0x9710
movsd 0x283c9(%rip), %xmm1    # 0x109068
mulsd -0x10(%rbp), %xmm1
addsd 0x4ac5c(%rip), %xmm1    # 0x12b908
mulsd %xmm1, %xmm0
addsd -0x20(%rbp), %xmm0
movsd %xmm0, -0x30(%rbp)
movsd -0x40(%rbp), %xmm0
callq 0x9710
movsd 0x4ac44(%rip), %xmm1    # 0x12b910
mulsd -0x10(%rbp), %xmm1
movsd %xmm1, -0x20(%rbp)
movsd 0x4ac3a(%rip), %xmm2    # 0x12b918
addsd %xmm1, %xmm2
mulsd %xmm2, %xmm0
addsd -0x30(%rbp), %xmm0
movsd %xmm0, -0x30(%rbp)
movsd -0x8(%rbp), %xmm0
callq 0x9710
mulsd 0x4ac1e(%rip), %xmm0    # 0x12b920
addsd -0x30(%rbp), %xmm0
movsd %xmm0, -0x30(%rbp)
movsd -0x60(%rbp), %xmm0
addsd -0x40(%rbp), %xmm0
callq 0x9710
movsd 0x4ac05(%rip), %xmm1    # 0x12b928
mulsd -0x10(%rbp), %xmm1
addsd 0x4ac00(%rip), %xmm1    # 0x12b930
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 0x2ad7d(%rip), %xmm0    # 0x10bae0
addsd -0x30(%rbp), %xmm0
movsd %xmm0, -0x30(%rbp)
movsd -0x48(%rbp), %xmm0
addsd -0x8(%rbp), %xmm0
callq 0x9710
movsd -0x20(%rbp), %xmm1
addsd 0x4abaf(%rip), %xmm1    # 0x12b938
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 0x3d665(%rip), %xmm1    # 0x11e418
addsd 0x4ab85(%rip), %xmm1    # 0x12b940
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 0x4ab5a(%rip), %xmm0    # 0x12b948
addsd -0x10(%rbp), %xmm0
movsd %xmm0, -0x10(%rbp)
movsd -0x48(%rbp), %xmm0
subsd -0x8(%rbp), %xmm0
callq 0x9710
mulsd 0x4ab41(%rip), %xmm0    # 0x12b950
addsd -0x10(%rbp), %xmm0
movsd %xmm0, -0x10(%rbp)
movsd -0x8(%rbp), %xmm0
addsd -0x18(%rbp), %xmm0
movsd %xmm0, -0x80(%rbp)
callq 0x9710
mulsd 0x4ab23(%rip), %xmm0    # 0x12b958
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 0x4aaee(%rip), %xmm0    # 0x12b960
addsd -0x50(%rbp), %xmm0
movsd %xmm0, -0x50(%rbp)
movsd -0x18(%rbp), %xmm0
subsd -0x8(%rbp), %xmm0
callq 0x9710
mulsd 0x2821d(%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 0x4aaaf(%rip), %xmm0    # 0x12b968
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 0x3da1d(%rip), %xmm0    # 0x11e900
addsd -0x58(%rbp), %xmm0
movsd %xmm0, -0x58(%rbp)
movsd -0x20(%rbp), %xmm0
callq 0x9710
mulsd 0x2a951(%rip), %xmm0    # 0x10b850
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 0x4aa35(%rip), %xmm0    # 0x12b970
addsd -0x70(%rbp), %xmm0
movsd %xmm0, -0x70(%rbp)
movsd -0x60(%rbp), %xmm0
addsd -0x8(%rbp), %xmm0
callq 0x9710
mulsd 0x4aa1c(%rip), %xmm0    # 0x12b978
addsd -0x70(%rbp), %xmm0
movsd %xmm0, -0x60(%rbp)
movsd -0x28(%rbp), %xmm0
subsd -0x8(%rbp), %xmm0
callq 0x9710
mulsd 0x28173(%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 0x3d944(%rip), %xmm0    # 0x11e8f0
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 0x2a92d(%rip), %xmm0    # 0x10b908
addsd -0x28(%rbp), %xmm0
movsd %xmm0, -0x38(%rbp)
movsd -0x40(%rbp), %xmm0
addsd -0x18(%rbp), %xmm0
callq 0x9710
mulsd 0x3d80c(%rip), %xmm0    # 0x11e808
addsd -0x38(%rbp), %xmm0
movsd %xmm0, -0x28(%rbp)
movsd 0x2aa12(%rip), %xmm1    # 0x10ba20
mulsd -0x68(%rbp), %xmm1
movsd %xmm1, -0x38(%rbp)
movsd -0x80(%rbp), %xmm0
addsd %xmm1, %xmm0
callq 0x9710
mulsd 0x2a8da(%rip), %xmm0    # 0x10b908
addsd -0x28(%rbp), %xmm0
movsd %xmm0, -0x28(%rbp)
movsd -0x18(%rbp), %xmm0
subsd -0x40(%rbp), %xmm0
callq 0x9710
mulsd 0x3d751(%rip), %xmm0    # 0x11e7a0
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 0x280ba(%rip), %xmm0    # 0x109138
addsd -0x28(%rbp), %xmm0
movsd %xmm0, -0x28(%rbp)
movsd -0x20(%rbp), %xmm0
addsd -0x8(%rbp), %xmm0
callq 0x9710
mulsd 0x2a969(%rip), %xmm0    # 0x10ba08
addsd -0x28(%rbp), %xmm0
movsd %xmm0, -0x20(%rbp)
movsd -0x48(%rbp), %xmm0
addsd -0x40(%rbp), %xmm0
callq 0x9710
mulsd 0x4a8c0(%rip), %xmm0    # 0x12b980
addsd -0x20(%rbp), %xmm0
movsd %xmm0, -0x20(%rbp)
movsd -0x48(%rbp), %xmm0
subsd -0x40(%rbp), %xmm0
callq 0x9710
mulsd 0x2a927(%rip), %xmm0    # 0x10ba08
addsd -0x20(%rbp), %xmm0
movsd %xmm0, -0x48(%rbp)
movsd -0x10(%rbp), %xmm0
addsd -0x18(%rbp), %xmm0
callq 0x9710
mulsd 0x2a906(%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 0x4a859(%rip), %xmm0    # 0x12b980
addsd -0x10(%rbp), %xmm0
movsd %xmm0, -0x10(%rbp)
movsd -0x78(%rbp), %xmm0
addsd -0x8(%rbp), %xmm0
addsd -0x18(%rbp), %xmm0
callq 0x9710
mulsd 0x4a833(%rip), %xmm0    # 0x12b980
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 0x2a891(%rip), %xmm0    # 0x10ba08
addsd -0x10(%rbp), %xmm0
movsd %xmm0, -0x8(%rbp)
movsd -0x60(%rbp), %xmm0
addsd -0x18(%rbp), %xmm0
callq 0x9710
mulsd 0x2a870(%rip), %xmm0    # 0x10ba08
addsd -0x8(%rbp), %xmm0
movsd %xmm0, -0x8(%rbp)
movsd -0x30(%rbp), %xmm0
subsd -0x40(%rbp), %xmm0
callq 0x9710
mulsd 0x2a84f(%rip), %xmm0    # 0x10ba08
addsd -0x8(%rbp), %xmm0
movsd %xmm0, -0x8(%rbp)
movsd -0x38(%rbp), %xmm0
addsd -0x18(%rbp), %xmm0
callq 0x9710
mulsd 0x2a82e(%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 0x2a809(%rip), %xmm0    # 0x10ba08
addsd -0x8(%rbp), %xmm0
divsd 0x4a77c(%rip), %xmm0    # 0x12b988
addq $0x80, %rsp
popq %rbp
retq