маленькая, но не менее умная задача

есть какое-то вещественное C
надо найти такие целые A в [A_min..A_max], B в [B_min..B_max] так
чтобы A / B было максимально близко к C ( скажем c = A/B, надо Min (c-C)^2 )

Большая, умная задача

C#, гвозди

Кратко - type inference my ass.
Continue reading ‘C#, гвозди’ »

Bubblesort, кеши и быстродействие

Несколько интересных соображений, навеянных публикациями по dual-pivot quicksort.

Оценки сложности программ - это все замечательно, это все, безусловно, необходимо знать, необходимо уметь оценивать эти параметры в задачах, и на вопросах про сложности сортировок сыпется огромное количество собеседующихся. Но если на минутку отвлечься от теоретических изысканий, то в рамках нашей прикладной приземленной обыденности можно найти множество интереснейших примеров того, как различные алгоритмы имеют абсолютно несравнимые сложности, константные (и не очень) коэффициенты “О большого” и побочные эффекты.

Эффектов масса. Это может быть и изменение ассемблерного кода, и избавление от лишних аллокаций, и оптимизация доступа к данным, и многое многое другое. Вот на закуску - несколько замеров скорости вычисления старой доброй пузырьковой сортировки.

Continue reading ‘Bubblesort, кеши и быстродействие’ »

onliner

ironpeter ‘at’ yandex-team

Это страшное слово setlocale

История эта случилась достаточно давно, но до сих пор она продолжает преследовать меня страшными кошмарами, связанными в основном с локализациями наших замечательных игр. Об этих проблемах многие даже и не задумываются, а, тем не менее, они могут серьезно подорвать вашу уверенность в светлом будущем.
Continue reading ‘Это страшное слово setlocale’ »

STL, пламенный привет

смерть итераторам!!!

давно пора

а у вас, в самописной, есть итераторы?
а зачем они у вас есть? чтобы как у всех?

dual-pivot quicksort

Все истинно гениальное очень просто.

http://iaroslavski.narod.ru/quicksort/DualPivotQuicksort.pdf

http://permalink.gmane.org/gmane.comp.java.openjdk.core-libs.devel/2628

Не прошло и 50 лет.

шейдер интерполятора

по мотивам того самого текстурного шейдера

сосбвтенно в заголовке всё сказано
use-case-ы у нас нормали, всевозможные кватернионы, базис для tangent space и прочие мелкие радости
кстати тот самый базис наглядно показывает необходимость в нескольких outputs
ну и, как всегда, на каждый пиксель интерполяторов приходится как минимум много
бонусы как и в прошлый раз. железо то-же

Про Unit тесты вообще и TDD в частности

Я уже говорил ранее - я не отношу себя к поклонникам test driven development (TDD), но в то же время считаю, что Unit tests - это вещь, которая архиважна практически для любой разработки.

Любовь к написанию юнит тестов начала формироваться уже давно. Еще в тот день, когда я бегал по стенам Creat Studio, топал ногами и кричал, почему для того, чтобы проверить, что функция подсчета выпуклой оболочки множества точек (не та, про которую я писал ранее, а другая) снова дала сбой, надо проводить 20-минутный полный цикл экспорта от редактора до игры и по визуальным артефактам во время игры убеждаться, что снова что-то пошло не так.

Позднее любовь закрепилась, когда я проводил четырхмесячную отладку бага, который заключался в неправильной генерации рандомайзера. Юнит тестом этот баг мог бы быть выяснен буквально за несколько минут.

Потом любовь стала взаимной, когда я начал делать нагрузочные тесты на собственную подсистему аллокации мелких блоков. Я ставил рандомайзнутый тест на ночной прогон, с утра приходил на работу и смотрел, смогла ли система выдержать испытание в виду нескольких миллиардов тестовых аллокаций/деаллокаций. Иногда с утра система висела в ассертах. Иногда - в access violation. Именно тогда специфика юнит тестирования начала оформляться в какие-то взаимные прочные и долговременные отношения.

Continue reading ‘Про Unit тесты вообще и TDD в частности’ »