// File: /workspace/github_cpp_makefile_star2_O2/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 0x47e24(%rip), %xmm0    # 0x115770
divsd 0x47e24(%rip), %xmm0    # 0x115778
movapd %xmm0, %xmm4
mulsd %xmm0, %xmm4
movapd %xmm0, %xmm5
mulsd %xmm4, %xmm5
movsd 0x47e34(%rip), %xmm1    # 0x1157a0
mulsd %xmm0, %xmm1
addsd 0x47e30(%rip), %xmm1    # 0x1157a8
movsd 0x47e30(%rip), %xmm2    # 0x1157b0
mulsd %xmm4, %xmm2
addsd %xmm1, %xmm2
movapd %xmm5, %xmm1
divsd 0x47e24(%rip), %xmm1    # 0x1157b8
addsd %xmm2, %xmm1
movapd %xmm1, %xmm3
movsd 0x27fe4(%rip), %xmm1    # 0xf5988
movsd 0x47dd4(%rip), %xmm2    # 0x115780
mulsd %xmm0, %xmm2
addsd 0x47dd0(%rip), %xmm2    # 0x115788
mulsd %xmm1, %xmm3
movsd %xmm3, -0x68(%rbp)
movsd 0x47dc7(%rip), %xmm3    # 0x115790
mulsd %xmm4, %xmm3
addsd %xmm2, %xmm3
movapd %xmm5, %xmm2
divsd 0x47dbb(%rip), %xmm2    # 0x115798
addsd %xmm3, %xmm2
movapd %xmm2, %xmm3
movsd 0x47dd3(%rip), %xmm2    # 0x1157c0
mulsd %xmm0, %xmm2
addsd 0x47dcf(%rip), %xmm2    # 0x1157c8
mulsd %xmm1, %xmm3
movsd %xmm3, -0x40(%rbp)
movsd 0x47dc6(%rip), %xmm3    # 0x1157d0
mulsd %xmm4, %xmm3
addsd %xmm2, %xmm3
movapd %xmm5, %xmm2
divsd 0x47dba(%rip), %xmm2    # 0x1157d8
addsd %xmm3, %xmm2
movapd %xmm2, %xmm3
movsd 0x47db2(%rip), %xmm2    # 0x1157e0
mulsd %xmm0, %xmm2
movsd %xmm0, -0x10(%rbp)
addsd 0x47da9(%rip), %xmm2    # 0x1157e8
mulsd %xmm1, %xmm3
movsd %xmm3, -0x8(%rbp)
movsd 0x47da0(%rip), %xmm3    # 0x1157f0
mulsd %xmm4, %xmm3
addsd %xmm2, %xmm3
movapd %xmm5, %xmm2
divsd 0x47d94(%rip), %xmm2    # 0x1157f8
addsd %xmm3, %xmm2
movapd %xmm2, %xmm3
movsd 0x47d8c(%rip), %xmm2    # 0x115800
mulsd %xmm0, %xmm2
addsd 0x47d88(%rip), %xmm2    # 0x115808
mulsd %xmm1, %xmm3
movsd %xmm3, -0x38(%rbp)
mulsd 0x47d7f(%rip), %xmm4    # 0x115810
addsd %xmm2, %xmm4
movapd %xmm5, %xmm0
divsd 0x47d77(%rip), %xmm0    # 0x115818
addsd %xmm4, %xmm0
mulsd %xmm1, %xmm0
movsd %xmm0, -0x18(%rbp)
callq 0x9710
movsd 0x47d65(%rip), %xmm1    # 0x115820
mulsd -0x10(%rbp), %xmm1
addsd 0x47d60(%rip), %xmm1    # 0x115828
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 0x47d31(%rip), %xmm1    # 0x115830
mulsd -0x10(%rbp), %xmm1
addsd 0x47d2c(%rip), %xmm1    # 0x115838
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 0x27ec6(%rip), %xmm1    # 0xf5a00
mulsd -0x10(%rbp), %xmm1
addsd 0x47cf9(%rip), %xmm1    # 0x115840
mulsd %xmm1, %xmm0
addsd -0x20(%rbp), %xmm0
movsd %xmm0, -0x20(%rbp)
movsd -0x18(%rbp), %xmm0
addsd %xmm0, %xmm0
callq 0x9710
movsd 0x254fd(%rip), %xmm1    # 0xf3068
mulsd -0x10(%rbp), %xmm1
addsd 0x47cd0(%rip), %xmm1    # 0x115848
mulsd %xmm1, %xmm0
addsd -0x20(%rbp), %xmm0
movsd %xmm0, -0x30(%rbp)
movsd -0x40(%rbp), %xmm0
callq 0x9710
movsd 0x47cb8(%rip), %xmm1    # 0x115850
mulsd -0x10(%rbp), %xmm1
movsd %xmm1, -0x20(%rbp)
movsd 0x47cae(%rip), %xmm2    # 0x115858
addsd %xmm1, %xmm2
mulsd %xmm2, %xmm0
addsd -0x30(%rbp), %xmm0
movsd %xmm0, -0x30(%rbp)
movsd -0x8(%rbp), %xmm0
callq 0x9710
mulsd 0x47c92(%rip), %xmm0    # 0x115860
addsd -0x30(%rbp), %xmm0
movsd %xmm0, -0x30(%rbp)
movsd -0x60(%rbp), %xmm0
addsd -0x40(%rbp), %xmm0
callq 0x9710
movsd 0x47c79(%rip), %xmm1    # 0x115868
mulsd -0x10(%rbp), %xmm1
addsd 0x47c74(%rip), %xmm1    # 0x115870
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 0x27f49(%rip), %xmm0    # 0xf5b78
addsd -0x30(%rbp), %xmm0
movsd %xmm0, -0x30(%rbp)
movsd -0x48(%rbp), %xmm0
addsd -0x8(%rbp), %xmm0
callq 0x9710
movsd -0x20(%rbp), %xmm1
addsd 0x47c23(%rip), %xmm1    # 0x115878
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 0x3a7e9(%rip), %xmm1    # 0x108468
addsd 0x47bf9(%rip), %xmm1    # 0x115880
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 0x47bce(%rip), %xmm0    # 0x115888
addsd -0x10(%rbp), %xmm0
movsd %xmm0, -0x10(%rbp)
movsd -0x48(%rbp), %xmm0
subsd -0x8(%rbp), %xmm0
callq 0x9710
mulsd 0x47bb5(%rip), %xmm0    # 0x115890
addsd -0x10(%rbp), %xmm0
movsd %xmm0, -0x10(%rbp)
movsd -0x8(%rbp), %xmm0
addsd -0x18(%rbp), %xmm0
movsd %xmm0, -0x80(%rbp)
callq 0x9710
mulsd 0x47b97(%rip), %xmm0    # 0x115898
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 0x47b62(%rip), %xmm0    # 0x1158a0
addsd -0x50(%rbp), %xmm0
movsd %xmm0, -0x50(%rbp)
movsd -0x18(%rbp), %xmm0
subsd -0x8(%rbp), %xmm0
callq 0x9710
mulsd 0x25351(%rip), %xmm0    # 0xf30b0
addsd -0x50(%rbp), %xmm0
movsd %xmm0, -0x50(%rbp)
movsd -0x58(%rbp), %xmm0
addsd -0x8(%rbp), %xmm0
addsd -0x18(%rbp), %xmm0
callq 0x9710
mulsd 0x47b23(%rip), %xmm0    # 0x1158a8
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 0x3aac9(%rip), %xmm0    # 0x108878
addsd -0x58(%rbp), %xmm0
movsd %xmm0, -0x58(%rbp)
movsd -0x20(%rbp), %xmm0
callq 0x9710
mulsd 0x27afd(%rip), %xmm0    # 0xf58c8
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 0x47aa9(%rip), %xmm0    # 0x1158b0
addsd -0x70(%rbp), %xmm0
movsd %xmm0, -0x70(%rbp)
movsd -0x60(%rbp), %xmm0
addsd -0x8(%rbp), %xmm0
callq 0x9710
mulsd 0x47a90(%rip), %xmm0    # 0x1158b8
addsd -0x70(%rbp), %xmm0
movsd %xmm0, -0x60(%rbp)
movsd -0x28(%rbp), %xmm0
subsd -0x8(%rbp), %xmm0
callq 0x9710
mulsd 0x252a7(%rip), %xmm0    # 0xf30f0
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 0x3a9f0(%rip), %xmm0    # 0x108868
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 0x27ad9(%rip), %xmm0    # 0xf5980
addsd -0x28(%rbp), %xmm0
movsd %xmm0, -0x38(%rbp)
movsd -0x40(%rbp), %xmm0
addsd -0x18(%rbp), %xmm0
callq 0x9710
mulsd 0x3a8b8(%rip), %xmm0    # 0x108780
addsd -0x38(%rbp), %xmm0
movsd %xmm0, -0x28(%rbp)
movsd 0x27bbe(%rip), %xmm1    # 0xf5a98
mulsd -0x68(%rbp), %xmm1
movsd %xmm1, -0x38(%rbp)
movsd -0x80(%rbp), %xmm0
addsd %xmm1, %xmm0
callq 0x9710
mulsd 0x27a86(%rip), %xmm0    # 0xf5980
addsd -0x28(%rbp), %xmm0
movsd %xmm0, -0x28(%rbp)
movsd -0x18(%rbp), %xmm0
subsd -0x40(%rbp), %xmm0
callq 0x9710
mulsd 0x3a7fd(%rip), %xmm0    # 0x108718
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 0x251f6(%rip), %xmm0    # 0xf3140
addsd -0x28(%rbp), %xmm0
movsd %xmm0, -0x28(%rbp)
movsd -0x20(%rbp), %xmm0
addsd -0x8(%rbp), %xmm0
callq 0x9710
mulsd 0x27b15(%rip), %xmm0    # 0xf5a80
addsd -0x28(%rbp), %xmm0
movsd %xmm0, -0x20(%rbp)
movsd -0x48(%rbp), %xmm0
addsd -0x40(%rbp), %xmm0
callq 0x9710
mulsd 0x47934(%rip), %xmm0    # 0x1158c0
addsd -0x20(%rbp), %xmm0
movsd %xmm0, -0x20(%rbp)
movsd -0x48(%rbp), %xmm0
subsd -0x40(%rbp), %xmm0
callq 0x9710
mulsd 0x27ad3(%rip), %xmm0    # 0xf5a80
addsd -0x20(%rbp), %xmm0
movsd %xmm0, -0x48(%rbp)
movsd -0x10(%rbp), %xmm0
addsd -0x18(%rbp), %xmm0
callq 0x9710
mulsd 0x27ab2(%rip), %xmm0    # 0xf5a80
addsd -0x48(%rbp), %xmm0
movsd %xmm0, -0x10(%rbp)
movsd -0x50(%rbp), %xmm0
subsd -0x68(%rbp), %xmm0
addsd %xmm0, %xmm0
callq 0x9710
mulsd 0x478cd(%rip), %xmm0    # 0x1158c0
addsd -0x10(%rbp), %xmm0
movsd %xmm0, -0x10(%rbp)
movsd -0x78(%rbp), %xmm0
addsd -0x8(%rbp), %xmm0
addsd -0x18(%rbp), %xmm0
callq 0x9710
mulsd 0x478a7(%rip), %xmm0    # 0x1158c0
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 0x27a3d(%rip), %xmm0    # 0xf5a80
addsd -0x10(%rbp), %xmm0
movsd %xmm0, -0x8(%rbp)
movsd -0x60(%rbp), %xmm0
addsd -0x18(%rbp), %xmm0
callq 0x9710
mulsd 0x27a1c(%rip), %xmm0    # 0xf5a80
addsd -0x8(%rbp), %xmm0
movsd %xmm0, -0x8(%rbp)
movsd -0x30(%rbp), %xmm0
subsd -0x40(%rbp), %xmm0
callq 0x9710
mulsd 0x279fb(%rip), %xmm0    # 0xf5a80
addsd -0x8(%rbp), %xmm0
movsd %xmm0, -0x8(%rbp)
movsd -0x38(%rbp), %xmm0
addsd -0x18(%rbp), %xmm0
callq 0x9710
mulsd 0x279da(%rip), %xmm0    # 0xf5a80
addsd -0x8(%rbp), %xmm0
movsd %xmm0, -0x8(%rbp)
movsd -0x58(%rbp), %xmm0
addsd %xmm0, %xmm0
addsd -0x18(%rbp), %xmm0
callq 0x9710
mulsd 0x279b5(%rip), %xmm0    # 0xf5a80
addsd -0x8(%rbp), %xmm0
divsd 0x477f0(%rip), %xmm0    # 0x1158c8
addq $0x80, %rsp
popq %rbp
retq