/**
  * Finds the accurate time of a solstice or equinox using the complete VSOP87
  * theory
  *
  * @param int   $year  The year to find a solstice or equinox for
  * @param array $terms An array of the mean terms for the desired equinox or
  *                     solstice
  * @param int   $month The month of the equinox or solstice to find
  *
  * @return float The JD of the solstice or equinox in TD
  */
 private static function accurate($year, array $terms, $month)
 {
     $Y = $year < 1000 ? (int) $year / 1000 : ((int) $year - 2000) / 1000;
     $q = intval($month / 3) - 1;
     $jde0 = static::Horner($Y, $terms);
     for ($i = 0; $i < 100; $i++) {
         // TODO:: use vsop 87, but use IAU apparent stuff?
         $λ = Solar::ApparentEclVSOP87(AstroDate::fromJD($jde0))->λ->rad;
         $Δ = 58 * sin(deg2rad($q * 90) - $λ);
         $jde0 += $Δ;
         if (abs($Δ) < 5.0E-7) {
             break;
         }
     }
     return $jde0;
 }