Я написал эту программу:libnova странное поведение для 89,5 градуса северной широты
#!/usr/bin/perl
use Astro::Nova qw(get_solar_equ_coords get_lunar_equ_coords get_hrz_from_equ
get_solar_rst_horizon get_timet_from_julian
get_julian_from_timet get_lunar_rst get_lunar_phase);
$observer = Astro::Nova::LnLatPosn->new("lng"=>0,"lat"=>89.5);
for $i (2456623..2456624) {
print "DAY: $i\n";
($status,$rst) = get_lunar_rst($i, $observer);
print "STATUS: $status\n";
$rst->get_transit();
$rise = $rst->get_rise();
print "RISE: $rise\n";
$set = $rst->get_set();
print "SET: $set\n\n";
}
и получил следующие результаты:
DAY: 2456623
STATUS: 1
RISE: 5.5664193588601e-309
SET: 1.55254159695923e-267
DAY: 2456624
STATUS: -1
RISE: 1.9634470382202e-153
SET: 2.26294632209635e+137
Другими словами, луна идет от циркумполярная (всегда) ниже горизонт, который никогда не поднимался и не поднимался.
Я понимаю, что 89,5 градусов - это своего рода угловой случай, но почему не должен этот код работать?
Как примечание http://aa.usno.navy.mil/data/docs/RS_OneYear.php показывает, что является Moonset в этом интервале (JD 2456623 = 2013-11-26 12:00:00):
Еще странность: если я закомментируйте "$ rst-> get_transit();" линия, я получить эти результаты:
DAY: 2456623
STATUS: 1
RISE: 5.5664193588601e-309
SET: 1.14372958360957e-268
DAY: 2456624
STATUS: -1
RISE: 6.80740365931403e+199
SET: 4.81766816905579e+151
Подъем/набор по-прежнему странно (это хорошо, так как статус -1), но они разные. Я всегда предполагал, что get_lunar_rst() вернул фиксированную структуру , но, видимо, нет? Сам акт проверки транзита время изменяет структуру?
EDIT: Хорошо, я запустил программу в два раза, не меняя его на всех и получил:
DAY: 2456623
STATUS: 1
RISE: 5.5664193588601e-309
SET: 2.99352717623831e-264
DAY: 2456624
STATUS: -1
RISE: 1.9634470382202e-153
SET: 2.26294632209635e+137
DAY: 2456623
STATUS: 1
RISE: 5.5664193588601e-309
SET: 3.04770606791278e-262
DAY: 2456624
STATUS: -1
RISE: 1.9634470382202e-153
SET: 2.26294632209635e+137
Другими словами, 2456623 заданные изменения без причины.
Посмотри на исходном коде и попытаться выяснить, почему 89.5 не ведет себя так, как вы ожидаете. Спросите автора модуля. Отправьте отчет об ошибке. – toolic