src/Marando/AstroDate/Traits/SolsticeEquinoxTrait.php
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($Δ) < 5e-7)
        break;
    }

    return $jde0;
  }
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($Δ) < 5e-7)
        break;
    }

    return $jde0;
  }
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