green_fr (green_fr) wrote,
green_fr
green_fr

Category:

Yearfrac

В MatLab есть замечательная функция yearfrac, которая возвращает разницу между двумя датами, выраженную в годах. При этом у функции есть третий параметр, правило подсчёта разницы — в финансах регулярно используются довольно экзотические правила, рудименты докомпьютерной эпохи. Например, между 1 январём и 1 февралём может быть 1/12 года (правило 30/360), 31/365 (правило actual/365) или иногда 31/365, а иногда 31/366, в зависимости от високосности года (правило actual/actual). Правил несколько десятков, но в нормальных условиях всегда используется правило actual/actual, это значение параметра by default.

А только что я обнаружил ужасный баг в этой, казалось бы, простой функции. Если посчитать разницу между 01/01/2007 года и 01/01/2009 года (здесь и далее только actual/actual), то функция выдаёт значение 731/365. Между 01/01/2008 года и 01/01/2010 года — 731/366. И только между 01/01/2009 и 01/01/2011 получаем разумный результат — ровно 2 года.

То есть авторы проверяют, есть ли 29 число в первом феврале промежутка, и если да, то все годы объявляются високосными, если нет — то все невисокосными. Понятно, что функцию писали из рассчёта на её использование внутри одного года, но в документации об этом ограничении ни слова!

P.S. К слову, поведение аналогичной функции Excel я вообще не понимаю. Первые два примера дают 731/365,333 (откуда берётся 365 1/3 дня?!), последний — уверенное 2.
Tags: excel, matlab, rabota
Subscribe

  • Pour la science №524

    Короткая заметка про хищные грибы :-) Точнее даже, пишут о том, что такие грибы известны давно: они могут на несколько часов парализовать мелких…

  • Pour la Science №523

    Заметка о том, что археологи, раскапывая стоянки древних инуитов на Аляске, нашли венецианское стекло. Точнее бусинки, надетые на ниточку. Ниточка…

  • Pour la science №522

    Я наконец-то понял / смог представить себе проекцию 4-мерного куба (то, что получилось на  Большой арке Дефанс) и развёртку 4-мерного куба (то, что…

  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 11 comments

  • Pour la science №524

    Короткая заметка про хищные грибы :-) Точнее даже, пишут о том, что такие грибы известны давно: они могут на несколько часов парализовать мелких…

  • Pour la Science №523

    Заметка о том, что археологи, раскапывая стоянки древних инуитов на Аляске, нашли венецианское стекло. Точнее бусинки, надетые на ниточку. Ниточка…

  • Pour la science №522

    Я наконец-то понял / смог представить себе проекцию 4-мерного куба (то, что получилось на  Большой арке Дефанс) и развёртку 4-мерного куба (то, что…