Шедевр кода
-
- Уже с Приветом
- Posts: 13482
- Joined: 04 Jul 2001 09:01
- Location: Boston, MA
Re: Шедевр кода
Помнится давно мне пришлось доделывать сайт, написанный на ColdFusion. Там тоже была дикая возня с календарём и кучей кейсов, а в конце была приписка -- Sorry guys I could not figure out how to make this shit shorter... По крайней мере автору была не чужда самокритика.
-
- Уже с Приветом
- Posts: 1860
- Joined: 02 Sep 2016 20:26
Re: Шедевр кода
Я видел код, где какое-то несложное выражение типа A*sin(x) + B*cos(x), верное для любого x, было расписано для пущей надежности в виде:
if (x < pi/2)
{
C = A*sin(x) + B*cos(x);
}
else if (x >= pi/2 && x < pi)
{
C = A*cos(x - pi/2) - B*sin(x - pi/2);
}
- и так 16 раз, потому что на самом деле там не только x, но и y менялся, и как x, так и y могли попадать в каждый из четырёх квадрантов.
Но вот что любопытно: этот чувак уже к 30 годам, написав к тому моменту около тридцати статей (каждую свою статью он публиковал дважды: по-английски с соавторами в журналах американских и королевских обществ и по-китайски с урезанным числом соавторов в Китае), стал ассосиейт-профессором в родном Китае, получил солидную по меркам американской профессуры зарплату, дом в бесплатное пользование и - благодаря своей позиции - хорошую позицию для жены. Потрясающая работоспособность и отсутствие привычных западному ученому моральных принципов легко перевесили пробелы в тригонометрии и программировании.
if (x < pi/2)
{
C = A*sin(x) + B*cos(x);
}
else if (x >= pi/2 && x < pi)
{
C = A*cos(x - pi/2) - B*sin(x - pi/2);
}
- и так 16 раз, потому что на самом деле там не только x, но и y менялся, и как x, так и y могли попадать в каждый из четырёх квадрантов.
Но вот что любопытно: этот чувак уже к 30 годам, написав к тому моменту около тридцати статей (каждую свою статью он публиковал дважды: по-английски с соавторами в журналах американских и королевских обществ и по-китайски с урезанным числом соавторов в Китае), стал ассосиейт-профессором в родном Китае, получил солидную по меркам американской профессуры зарплату, дом в бесплатное пользование и - благодаря своей позиции - хорошую позицию для жены. Потрясающая работоспособность и отсутствие привычных западному ученому моральных принципов легко перевесили пробелы в тригонометрии и программировании.
-
- Уже с Приветом
- Posts: 12017
- Joined: 08 Sep 2006 20:07
- Location: Силиконка
Re: Шедевр кода
Без 16 раз, наверное, можно бы было и обойтись, но может вы чуток приукрасили?Larsonsager wrote: 31 Jan 2018 01:02 Я видел код, где какое-то несложное выражение типа A*sin(x) + B*cos(x), верное для любого x, было расписано для пущей надежности в виде:
if (x < pi/2)
{
C = A*sin(x) + B*cos(x);
}
else if (x >= pi/2 && x < pi)
{
C = A*cos(x - pi/2) - B*sin(x - pi/2);
}
- и так 16 раз, потому что на самом деле там не только x, но и y менялся, и как x, так и y могли попадать в каждый из четырёх квадрантов.
А сделать несколько вариантов, чтобы избежать экстремумов или потери точности - то что в этом плохого?
Мир Украине. Свободу России.
-
- Уже с Приветом
- Posts: 514
- Joined: 07 Dec 2001 10:01
- Location: toronto
Re: Шедевр кода
Функция sin(x) определена на всём пространстве вещественных чисел, по идее. К тому же, sin(x) === cos(x - pi/2) для любого х, как и было сказано.
Выглядит странно, конечно. Программист мог бы объяснить тем, что там были изначально разные формулы для разных квадрантов, а потом усохли. Понятно же, что эволюционные наслоения в коде иногда приводят и к более смешным наслоениям.
Выглядит странно, конечно. Программист мог бы объяснить тем, что там были изначально разные формулы для разных квадрантов, а потом усохли. Понятно же, что эволюционные наслоения в коде иногда приводят и к более смешным наслоениям.