Entry tags:
Опять же истории из жизни
Однажды приятель, работающий в Хеврат Хашмаль, прислал мне на работу письмо с заголовком: "Смотри, как в нашей конторе проверяют две переменные на равенство" и кусочком кода на несколько строчек:
if( a > b)
{
/* Do nothing */
}
else if( a < b)
{
/* Do nothing */
}
else
{
блаблабла - тут был написан какой-то реальный код.
}
Я посмеялся в усы и тут же переслал это письмо всем на фирме - только на всякий случай, чтобы не подставлять мужика (кто знает, какие у них там порядки в Хеврат Хашмале), вырезал все его данные и написал только, что вот, мол, этот код - не просто шутка, а кусок живой программы. Пусть, думаю, народ повеселится.
Через три минуты мне пришло ДВА ответа примерно одинакового содержания: "It's not me, it was there before"
if( a > b)
{
/* Do nothing */
}
else if( a < b)
{
/* Do nothing */
}
else
{
блаблабла - тут был написан какой-то реальный код.
}
Я посмеялся в усы и тут же переслал это письмо всем на фирме - только на всякий случай, чтобы не подставлять мужика (кто знает, какие у них там порядки в Хеврат Хашмале), вырезал все его данные и написал только, что вот, мол, этот код - не просто шутка, а кусок живой программы. Пусть, думаю, народ повеселится.
Через три минуты мне пришло ДВА ответа примерно одинакового содержания: "It's not me, it was there before"
no subject
I've seen code like this:
if ( commission != 0.0 ) {
price += commission;
}
no subject
no subject
Например, если в системе, под которую это писалось,
а) плавающие операции дороги;
б) сравнение двух переменных на равенство не есть плавающая операция;
в) commission почти всегда равен нулю
Экономия, конечно, маленькая, но всё ж.
no subject
Человек, который пишет финансовую аппликацию в системе, где плавающие операции настолько дороги - полный мудак.
Кроме того, быстродействие компьютеров растет. Можно оптимизировать, а можно - подождать, пока hardware догонит требуемую мощность. Оптимизация уместна, если она может быть сделана за время, меньшее времени требуемого ожидания нового железа. А тут надо было как минимум секунд 5 печатать.
no subject
no subject
Несомненно, но мне было лень писать очевидное :-)
Про то, что компьютеры делаются все быстрее - как раз часто забывают. Я видал такие проекты, где 2 программиста с зарплатой за 100 целый год оптимизировали огромную библиотеку так, что она стала в среднем - на 30% быстрее. Могли вместо того закупить новые сервера, на которые всегда так жалко тратиться, и за те же бабки, за то же время - разогнаться куда? Именно.
no subject
no subject
Так о чем мы спорим?
Игорь Борисович, Вы же - интеллигентный человек...
no subject
no subject
no subject
вдруг понадобится срочно что-то сделать для случая a>b
а у них уже все и готово
no subject
Меня тогда гораздо больше развеселила реакция коллег, если честно.
no subject
no subject
Но между нами, девочками, в моих программах такие "заглушки" сплошь и рядом.
Часто работодатель знает, что делать, если a>b, но пока еще совсем не представляет, что делать в других случаях, но на всякий случай нужно поставить "заглушку", потому что через пару дней или недель ему обязательно что-то придумается.
no subject
public final static int ETHICAL_VIOLATION_EXCEPTION = 10;
правда прелесть?
no subject
Не все так плохо
Кроме того, довод про компилятор и оптимизацию ни при чем. Компилятор может также построить правильную программу из кода в одну длииииинную строчку, где все переменные имеют имена от a00000 до z99999, но стоимость сопровождения такого кода он, к сожалению, оптимизировать не может :( Код читается людьми, да и пишется для них же :)
Re: Не все так плохо
Эта идея, которую никто не в состоянии усвоить. Писать код - для людей, не для компьютера...
Казалось бы - простая человеческая гордость должна сказать человеку - не оптимизируй операторы, это - ниже твоего достоинства, этим пусть компилятор занимается, он железный. А комментарии и докумeнтация? Из 10 менеджреов 9 сразу скажут, что у нас нету времени писать документацию.
Re: Не все так плохо
no subject
(дисклямер: я давно не имел дел с плавающей точкой, посему могу и гнать.)
no subject
if (x==sqrt(x*x))
может сработать совсем не так как того ожидает наивный программист.
Но уж если представление отличается от точного, то оно либо меньше, либо больше.
правильно писать
if (fabs(x-sqrt(x*x))
if (x==sqrt(x*x))
может сработать совсем не так как того ожидает наивный программист.
Но уж если представление отличается от точного, то оно либо меньше, либо больше.
правильно писать
if (fabs(x-sqrt(x*x))<EPS)
где EPS - допустимая ошибка.
А код из примера <lj site="livejournal.com" user="igorbor"> решительно ничему не помогает
no subject
проверять на равенство "в лоб" в таком случае неразумно, натурально.
но заключать "равно" исходя из того, что "и не меньше, и не больше", по-моему, нормально.
(хотя рисовать пустые if'ы глупо всё равно, конечно же)
no subject
Нет. Положим, sqrt(16) будет не 4, а 3.99999999. Тогда сработает ветка "меньше" - и чего мы добились?
no subject
резонного вывода "чёрт подери, а ведь вычисления с плавающей точкой могут быть неточны!".
я собственно всё к чему? к тому что логика типа "if a > b stuff else if a < b stuff else stuff" не обязательно избыточна, а не к тому что последняя ветка в ней так уж информативна. :)
(прошу прощения за пустой коммент, ЖЖ глючит)
no subject
no subject
no subject
Конечно, и всё же сравнение с нулём особый случай.
no subject
(asin(1)-M_PI/2) может запросто оказаться отличным от 0.
no subject
Вообще-то мне казажется, что как раз это должно сработать, если плавающие числа удовлетворяют IEEE. Стандарт требует, чтобы определенные операции давали именно как раз - четкое соответствие между аргументами и результатами. Не помню - какие именно операции и функции включены.
буквально на днях
у меня было соверешнно дикое и громоздкое условие, при выполнении которого не нужно было ничего делать, а в обратном случае - выводить некий блок на страницу,
в момент написания я была уже настолько заморочена, что противоположное условие в голове у меня уже не выстраивалось, можно конечно было построить его по формальным правилам, но опасаюсь я использовать то, что не помещается в моей голове %)) и я написала это самое - пустой иф и не пустой элз %)))) и тут же кое-кому призналась в содеянном :)) но за общей занятостью, как это обычно бывает, оно живет себе в таком виде до сих пор :)
Не все так плохо
Но в данном случае как раз все просто. Пишете иф, потом берете в скобки и перед скобками ставите ! :)
no subject
if (!a == false) { ... }И никто не решается поправить, потому как "оно же работает!"no subject
no subject