Re: # как манагеров достали те, кого достали манагеры
От: Cyberax Марс  
Дата: 26.12.10 09:39
Оценка:
Здравствуйте, мыщъх, Вы писали:

М>ЗЫ.ЗЫ.ЗЫ. а вы говорите, что за рубежом наших спецов не надо. уверен, что тут на форуме это решат влет (у меня ушло ~5 сек)

Хех. Для программистов на JavaScript это, кстати, достаточно важный момент.
Sapienti sat!
Re[2]: # как манагеров достали те, кого достали манагеры
От: Finder_b  
Дата: 26.12.10 10:08
Оценка:
Здравствуйте, SE, Вы писали:

SE>Здравствуйте, мыщъх, Вы писали:


М>>вариант для JS отличался только тем, что там нету TYPEA


М>>function foo(a){ return ((a + 1) == a); }


SE>1) В С не силен, потому для жабаскрипта.

SE>2) Проверка на NaN, к примеру
SE>3) NaN
NaN похож на null в SQL, то есть он не чему не равен включая самого себя. Для нан функция вернет false. Уж не знаю как в JS, но во всех известных мне языках так.

SE>А манагера за шкирку и на улицу за такие задачки. Или дать таки ведро мыла.

+1
Re[2]: # как манагеров достали те, кого достали манагеры
От: minorlogic Украина  
Дата: 26.12.10 10:11
Оценка: +1
Здравствуйте, Олег К., Вы писали:

ОК>ЗЫ. Где return type?


Это же C без плюс плюс.
... << RSDN@Home 1.2.0 alpha 4 rev. 1237>>
Ищу работу, 3D, SLAM, computer graphics/vision.
Re: # как манагеров достали те, кого достали манагеры
От: minorlogic Украина  
Дата: 26.12.10 10:25
Оценка: 11 (4) +1
Здравствуйте, мыщъх, Вы писали:

Задача крайне странная. Выглядит как "догадайся что именно хотел спросить интервьюер". Т.е. надо отгадать (именно отгадать а не решить) не ответ а вопрос.

М>1) определить TYPEA;


любой тип потдерживающий сложение с 1. Или непотдерживающий, если задача получить ошибку компиляции.

М>2) объяснить смысловую нагрузку данного кода;


Никакого смысла функция с названием foo не может нести по определению, если за это пытаются выдать функцию проверяющую абсолютную точность то увольнять надо того кто задачу писал (обязан знать штатные средства для работы с плавающими числами и поведение при NAN INF и т.п. ).

М>3) назвать (без компьютера) хотя бы одно 'a' при котором условие истинно;

М>hint: ЦП без багов, язык ансишный, по стандарту.

Это просто, 16.0/FLT_EPSILON при типе "float"

М>ЗЫ.ЗЫ.ЗЫ. а вы говорите, что за рубежом наших спецов не надо. уверен, что тут на форуме это решат влет (у меня ушло ~5 сек)


Если задача найти телепатов непроста для HR , мои ему соболезнования.
... << RSDN@Home 1.2.0 alpha 4 rev. 1237>>
Ищу работу, 3D, SLAM, computer graphics/vision.
Re[2]: # как манагеров достали те, кого достали манагеры
От: StandAlone  
Дата: 26.12.10 10:27
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Хех. Для программистов на JavaScript это, кстати, достаточно важный момент.


Usecase?
Написание рэйтрейсера, или оболочки бортовой ЭВМ?
Re[3]: # как манагеров достали те, кого достали манагеры
От: Cyberax Марс  
Дата: 26.12.10 11:07
Оценка: 1 (1)
Здравствуйте, StandAlone, Вы писали:

C>>Хех. Для программистов на JavaScript это, кстати, достаточно важный момент.

SA>Usecase?
SA>Написание рэйтрейсера, или оболочки бортовой ЭВМ?
Если бы. В JS все числа по стандарту — это double. Но при этом на них возможны битовые операции. И они ведут себя как операции над обычными int'ами.

До тех пор, пока число не превысит 2^52. После чего они ВНЕЗАПНО перестают работать. Про мелочи типа a+1==a тоже не забываем.

И на это вполне реально наткнутся, скажем, при рисовании на Canvas'е в этом вашем новомодном HTML5.
Sapienti sat!
Re[3]: # как манагеров достали те, кого достали манагеры
От: Pzz Россия https://github.com/alexpevzner
Дата: 26.12.10 12:07
Оценка: +1 -1
Здравствуйте, -MyXa-, Вы писали:

Pzz>>Ну осмысленным этот код выглядит, если TYPEA — float или double (проверяет, что значение столь велико, что прибавление 1 тонет в округлении).


MX>Не обязательно велико. При сильно мало тоже. Но и это ещё не всё.


Велико по абсолютному значению

А какие еще варианты?
Re[3]: # как манагеров достали те, кого достали манагеры
От: Pzz Россия https://github.com/alexpevzner
Дата: 26.12.10 12:18
Оценка:
Здравствуйте, Sap78, Вы писали:

Pzz>>Ну осмысленным этот код выглядит, если TYPEA — float или double (проверяет, что значение столь велико, что прибавление 1 тонет в округлении).


S>Для меня этот код не выглядит осмысленным, даже если TYPEA — float или double.


Это утверждение про вас или про код?

S>
S>if(foo(myDoubleVariable))
S>{
S>//значение myDoubleVariable столь велико, что прибавление 1 тонет в округлении
S>//факт, конечно, забавный, но что с этим делать в production code - непонятно.
S>}
S>


Ну, например, не прибавлять по единице.
Re[5]: # как манагеров достали те, кого достали манагеры
От: Pzz Россия https://github.com/alexpevzner
Дата: 26.12.10 12:20
Оценка:
Здравствуйте, StandAlone, Вы писали:

Pzz>>чтобы назвать число, человек должен знать, как плавучка внутри себя устроена. думаю, современные соискатели понятия об этом не имеют


SA>Смутно вспоминается что-то про 11 бит на мантиссу и 29 на порядок.


Ответ не верный. По крайней мере, для x86.

SA>Интересно, массовый уход сотрудников из Гугла начался до или после введения этих задачек?


Это задачка на входе. Уже принятых сотрудников она не касается.

SA>И почему бы не просить собеседуемого реализовать swap командой xor?


Потому что ответ все знают наизусть.

SA>Или там спеть, станцевать, постоять на голове, показать слона.. по степени осмысленности примерно равнозначно будет.


Потому что в гугле нет пока циркового отделения.
Re[2]: # как манагеров достали те, кого достали манагеры
От: dilmah США  
Дата: 26.12.10 12:22
Оценка: +1
Pzz>Для bool'ов тоже должно работать, но смысл не улавливается.

для булов не будет работать, потому что если А это true, то при вычислении (A+1) оно неявно приводится к инту, то есть получается 2. Дальше при сравнении с А, это А тоже неявно приводится к инту (integral promotion bool->int, потому что левый операнд инт), и в результате 2 сравнивается с 1.
Re: а вот я не догадался
От: alzt  
Дата: 26.12.10 12:30
Оценка: +2 -1
Здравствуйте, мыщъх, Вы писали:

М>foo(TYPEA a){ return ((a + 1) == a); }


М>1) определить TYPEA;

М>2) объяснить смысловую нагрузку данного кода;
М>3) назвать (без компьютера) хотя бы одно 'a' при котором условие истинно;
М>hint: ЦП без багов, язык ансишный, по стандарту.

Это вообще какая-то угадайка, где надо заранее знать правильный ответ.

Причём ответить надо быстро. А ведь многие люди теряются, когда их поджимает время. 30 секунд — это неадкватно для программиста. Может подобный навык требуется на разных олимпиадах или ток шоу, но на нормальной работе за такое надо по рукам бить — нужно качественное продуманное решение, а этот м.... "мегамозг" таймер засёк, на время делать решил. Потом будет хвалиться как быстро решил задачу.
Всё же в программировании важнее не скорость решения, а продуманность. Конечно, если челове "думает" месяц над недельной задачей — это не хорошо. Но обычно задачи затягиваются не потому, что кто-то долго думает. а потому, что вообще не думает, пишет всякую ерунду, а потом баги выловить пытается.

Вычисления с плавающей запятой знаю нормально. В ВУЗе, помню, заставляли вручную все их просчитывать. Ну а потом как-то вплотную с ними не работал. Понимаю базовые вещи, понимаю что если отсортированную последовательность float-ов складывать, то результат очень сильно зависит от типа сортировки (по возрастанию, по убыванию). При необходимости могу освежить свои знания и знать какой бит за что отвечает. Но не возникало таких необходимостей как-то.

На С нет вывода типов, там даже шаблонов нету. Такие задачи там просто возникнуть не могут.
Меня сразу сбила константа 1. Её тип int и точка. Сразу начал думать в другом направлении. До неявных преобразований как-то и не дошло.
Re[4]: # как манагеров достали те, кого достали манагеры
От: -MyXa- Россия  
Дата: 26.12.10 12:40
Оценка: -3
Здравствуйте, Pzz, Вы писали:

Pzz>Здравствуйте, -MyXa-, Вы писали:


Pzz>>>Ну осмысленным этот код выглядит, если TYPEA — float или double (проверяет, что значение столь велико, что прибавление 1 тонет в округлении).


MX>>Не обязательно велико. При сильно мало тоже. Но и это ещё не всё.


Pzz>Велико по абсолютному значению


Ой. Я имел в виду "сильно близко к 0". Через это, например, машинный ноль определяется.

Pzz>А какие еще варианты?
Если не поможет, будем действовать током... 600 Вольт (C)
Re[3]: # как манагеров достали те, кого достали манагеры
От: SE Украина  
Дата: 26.12.10 13:50
Оценка:
Здравствуйте, Finder_b, Вы писали:

F_>NaN похож на null в SQL, то есть он не чему не равен включая самого себя. Для нан функция вернет false. Уж не знаю как в JS, но во всех известных мне языках так.


Об этом я и не подумал. Не работать мне у того манагера.
Но тогда если верить доками будет работать с Number.POSITIVE_INFINITY.
Re[4]: # как манагеров достали те, кого достали манагеры
От: dilmah США  
Дата: 26.12.10 14:13
Оценка:
Pzz>А какие еще варианты?

в С99 есть комплексные типы с плавающей точкой.

Для беззнаковых целочисленных типов ненулевой ширины -- понятно что выражение (a+1)==a всегда ложно.
Для знаковых целочисленных типов переполнение это UB, значит это на усмотрении компилятора что делать для максимального значения, имеет полное право считать тоже всегда false.

бывают целочисленные битовые поля размером 0 бит (для выравнивания). Но во-1 gcc требует чтобы они были безымянными, во-2 они существуют только как поля структуры, а не как самостоятельный тип, который можно передать как аргумент функции.

Можно было бы подумать про энум с одним или без одного значения, но реально все вычисления (a+1)==a будут проходить после перевода в целое, поэтому не получится ничего что не может дать целое.
Re: # как манагеров достали те, кого достали манагеры
От: shrecher  
Дата: 26.12.10 14:39
Оценка: 1 (1) :)))
Здравствуйте, мыщъх, Вы писали:

М>foo(TYPEA a){ return ((a + 1) == a); }


М>1) определить TYPEA;


Я думаю, TYPEA имеет перегруженный "operator +(int)", который ничего не делает. В результате, a + 1 не меняеет значение. В принципе, я больше не вижу решений, которые не зависили бы от плаформы или компайлера.
Re[4]: # как манагеров достали те, кого достали манагеры
От: jed  
Дата: 26.12.10 16:09
Оценка:
C>До тех пор, пока число не превысит 2^52. После чего они ВНЕЗАПНО перестают работать. Про мелочи типа a+1==a тоже не забываем.
В яваскрипте может поднадобится a+1==a? В каком случае?
Re[5]: # как манагеров достали те, кого достали манагеры
От: Cyberax Марс  
Дата: 26.12.10 16:20
Оценка: 2 (2) +1
Здравствуйте, jed, Вы писали:

C>>До тех пор, пока число не превысит 2^52. После чего они ВНЕЗАПНО перестают работать. Про мелочи типа a+1==a тоже не забываем.

jed>В яваскрипте может поднадобится a+1==a? В каком случае?
Опосредованно — много для чего. Банальный цикл for может вдруг стать бесконечным, к примеру.
Sapienti sat!
Re[6]: # как манагеров достали те, кого достали манагеры
От: jed  
Дата: 26.12.10 16:26
Оценка:
C>Опосредованно — много для чего. Банальный цикл for может вдруг стать бесконечным, к примеру.

При каком "а" там возможно true? При undefined или что-то подобное?
Re: # как манагеров достали те, кого достали манагеры
От: Young yunoshev.ru
Дата: 26.12.10 16:37
Оценка: 6 (2) +2
Здравствуйте, мыщъх, Вы писали:

М>Знакомый манагер из Новой Империи Зла (G$$gle) под рождество совсем опечалился, потому как Самый Главный Злодей (HR) бьется головой об стену и просит в качестве выходного пособия выдать ему веревку и ведро мыло.


М>А все потому что претендентам на Senior C/C++, Senior Java, Senior JavaScript, etc... было предложено следующее задание в стиле "блиц" для решения на бумаге за 30 сек.


М>Привожу вариант для сишников:


М>foo(TYPEA a){ return ((a + 1) == a); }


А я вот, когда увидел код то подумал, так float это быть не может потому что иначе было бь "a + 1.0f".


Вообщем ты должен быть фанатом "собеседование у Баткина" — http://blog.gamedeff.com/?p=64

Но увы и ах — мой опыт показывает набирать людей которые могут пройти подобное интервью в отделы которые не занимаются research-ом, а выпускают обыкновенные end-user продукты экономически не целесообразно.
Re: # как манагеров достали те, кого достали манагеры
От: Alexey Sudachen Чили  
Дата: 26.12.10 17:11
Оценка:
М>Как вы считаете, сколько кандидатов прошло тест даже когда им предоставили комп и минут с полчаса для раздумий и экспериментрв?

И сколько? Колись давай!

На моей памяти никто из собеседуемых не мог обьяснить, как так может быть что (int)(.5+i) == (int)(1.5+i). i — целое. А казалось бы.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.