green_fr: (Default)
green_fr ([personal profile] green_fr) wrote2014-12-03 11:53 am
Entry tags:

Proust project

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

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

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

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

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

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

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

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

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