green_fr: (Default)
[personal profile] green_fr
На работе в какой-то момент заметили, что программа начала ужасно тормозить. Часов так 10 лишних. Начали искать, в чём проблема.
Нашли версию, которая ещё была быстрой. Простой просмотр изменений с этой версии ничего не дал. Методом деления пополам (8 итераций) нашли, наконец-то, правку, которая чуть ли не удвоила время расчёта. Строчка тупая до безобразия — накопительные контракты нашего портфеля в какой-то момент (по достижении пенсионного возраста) пересчитываются в ренту, и одна из процентных ставок формулы пересчёта долгое время была фиксированной. Нас заставили переписать фиксированную ставку на динамическую (привязка к 10-летней ставке центробанка), мы это сделали, в этот момент потеряли примерно час расчёта. А потом обнаружили небольшую ошибку в формуле 10-летней ставки (грубо говоря, забыли разделить на 10), исправили её — и теряем 10 часов. Очевидно, что само исправление (операция деления на 10) занимает существенно меньше времени, чем 10 часов. Отгадка оказалась в том, что упомянутая процентная ставка законом ограничена сверху. И до деления на 10 практически всегда мы брали значение этого потолка. Что позволяло нам группировать расчёты в разных экономических сценариях. А после деления всё гораздо хуже — сколько сценариев, столько и возможных ставок, лишь изредка вылезает значение потолка.
Красивая иллюстрация того, что полный тест (и значения, и время расчёта — всё проверять!) нужно запускать после каждой правки. Чуть ли не после исправленного комментария.
Ну и отдельные лучи поддержки товарищу, ответственному за контроль результатов этой модификации...
P.S. Папку со всеми этими версиями назвали «Пруст», потому что «В поисках потерянного времени» :-)

Date: 2014-12-03 10:59 am (UTC)
From: [identity profile] katichka.livejournal.com
Юмористы! :))))

Date: 2014-12-03 11:04 am (UTC)
From: [identity profile] green-fr.livejournal.com
;-)
Ты же знаешь, что любую профессию можно сделать интересной?
Image

Date: 2014-12-03 11:09 am (UTC)
From: [identity profile] katichka.livejournal.com
Именно! Ржу.

Date: 2014-12-03 11:24 am (UTC)
From: [identity profile] birdwatcher.livejournal.com
Круто: благодаря социализму программы работают быстрее, у всех участников рынка снижаются вычислительные издержки.
Кстати, тоже только что использовал метод половинного деления номеров версий, но ловил не десять часов, а десять микросекунд.

Date: 2014-12-03 01:15 pm (UTC)
From: [identity profile] green-fr.livejournal.com
А что было такого принципиального в 10 микросекундах?

Date: 2014-12-03 01:20 pm (UTC)
From: [identity profile] birdwatcher.livejournal.com
Ну ты спросил. Разница между терять деньги и зарабатывать.

Date: 2014-12-03 02:07 pm (UTC)
From: [identity profile] green-fr.livejournal.com
А расскажи, что ты там такого используешь, чтобы микросекунды считать?

Date: 2014-12-03 02:17 pm (UTC)
From: [identity profile] birdwatcher.livejournal.com
Так часы сейчас идут в наносекундах. 64-битные целые.

Profile

green_fr: (Default)
green_fr

May 2025

S M T W T F S
    1 23
4 5 678910
11 12 1314 15 1617
18192021222324
25262728293031

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated May. 23rd, 2025 05:47 am
Powered by Dreamwidth Studios