![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
xTr1m |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 692 Регистрация: 9.2.2005 Где: Москва Репутация: 1 Всего: 1 |
Доброго времени суток. Решил отправить тестовое задание в яндекс, для собственной проверки. Задания вроде были не очень сложные, но получил отказ. Если можно, то хотел бы отдать кому-нибудь код "на проверку", чтобы сказали, что не так. Сюда, наверное, выкладывать не буду, могу отослать на почту или в личку. Заранее спасибо.
|
|||
|
||||
Alca |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3993 Регистрация: 14.6.2006 Репутация: 7 Всего: 50 |
Чего? выкладывай
|
|||
|
||||
xTr1m |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 692 Регистрация: 9.2.2005 Где: Москва Репутация: 1 Всего: 1 |
||||
|
||||
Guinness |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 310 Регистрация: 21.6.2009 Где: Зеленоград Репутация: нет Всего: 10 |
Второе задание, я думаю они хотели примерно этого. Или если QString как контейнер не катит, то запихивать в массив char.
|
|||
|
||||
Alca |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3993 Регистрация: 14.6.2006 Репутация: 7 Всего: 50 |
xTr1m, это, что все задания, не верю
|
|||
|
||||
xTr1m |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 692 Регистрация: 9.2.2005 Где: Москва Репутация: 1 Всего: 1 |
там был еще один вопрос про скорость алгоритмов и на многопоточность. можно глянуть тут
это, как я понимаю, первый уровень отсева |
|||
|
||||
bsa |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
xTr1m, и не удивительно, что тебя послали. Кому нужен оторванный от жизни школьник?
Функция main() должна возвращать int. хидер "conio.h" нестандартен. Тебя просили целое число преобразовать в строку, а ты что сделал? Имхо, я бы это задание выполнил так:
А в примере на многопоточность есть как минимум две проблемы: когда Add лочит doubles, а Find(int) к этому времени уже залочил integers, затем Find может попытаться захватить doubles, но не выходит и ждет другой поток, а другой поток ждет освобождения integers - deadlock. Вообще ситуация с захватом двух мьютексов очень сложная и требует очень большой аккуратности и максимального ограничения областей захвата. В данном случае, лучше лочить не одновременно, а по очереди (что в find, что в add). Вторая проблема связана с сравнением чисел с плавающей точкой. Очень часто операция сравнения (operator==) может банально не работать. Поэтому для действительных чисел лучше использовать неточное сравнение ( abs(a - b) < eps ). |
||||
|
|||||
volatile |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 37 Всего: 85 |
Ну вот кто это составляет такие заданя. Тут надо по крайней мере написать что они вообще хотели. Если исходить из того, что дано, тогдаа члены i вообще нужно удалить. Доступа к ним нет, а сам класс с ними ничего не делает. А фантазировать, на тему, что с ними хотел делать автор, это из области парапсихологии. Так что вот так будет правильней:
По крайней мере здесь все правильно, и интерфейс для пользователя, не изменицца. (т.е. там где работал исходный код, там-же точно с таким эффектом будет работать и этот. Только без путаницы и оверхедов. Это сообщение отредактировал(а) volatile - 29.3.2013, 23:39 |
||||
|
|||||
noize |
|
|||
![]() 5.18.2 ![]() Профиль Группа: Участник Сообщений: 89 Регистрация: 10.7.2010 Где: СПб Репутация: нет Всего: 3 |
не раскажете подробнее о данной проблеме? |
|||
|
||||
Crafty |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 319 Регистрация: 3.11.2008 Репутация: 2 Всего: 14 |
Проблема в том, что числа с плавающей точкой нельзя представить точно.
Добавлено @ 13:34 Поэтому обычно сравнивают вот так
Это сообщение отредактировал(а) Crafty - 1.4.2013, 15:11 |
||||||
|
|||||||
Guinness |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 310 Регистрация: 21.6.2009 Где: Зеленоград Репутация: нет Всего: 10 |
Хм, я обычно сравниваю так:
|
|||
|
||||
noize |
|
|||
![]() 5.18.2 ![]() Профиль Группа: Участник Сообщений: 89 Регистрация: 10.7.2010 Где: СПб Репутация: нет Всего: 3 |
Crafty,
1. это справедливо и для float ? 2. В языке C действует такое же ограничение? Это сообщение отредактировал(а) noize - 1.4.2013, 14:03 |
|||
|
||||
Crafty |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 319 Регистрация: 3.11.2008 Репутация: 2 Всего: 14 |
Зачем так много действий в условии и max и умножение Попробуйте сравнить допустим 1.0 и 1.1 при эпислон 0.0001, в твоем случае он считает что они равны, что не верно Добавлено @ 14:06 noize, на всех языках ИМХО одно и тоже что паскаль, что си, что питон. Тут дело не в языке программирования ,а в том как представлены числа с плавающей точкой на самой машине. Добавлено @ 14:06 да Это сообщение отредактировал(а) Crafty - 1.4.2013, 14:10 |
|||
|
||||
Guinness |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 310 Регистрация: 21.6.2009 Где: Зеленоград Репутация: нет Всего: 10 |
Разве? (1.1 - 1.0 = 0.1) < 1.1 * 0.00001 Вроде как неравенство не проходит в данном случае, и числа неравны. Собственно, делается это, для того чтобы сравнивать числа любых размеров. К примеру: a = 0.008 b = 0.00701 eps = 0.001 abs(a-b) < max(a,b) * eps => 0.00099 < 0.008*0.001 Соотвественно, данные цифры не равны, что вполне логично. Т.к. различия у них в первой же значащей цифре. И другой пример a = 1.008 b = 1.00701 eps = 0.001 abs(a-b) < max(a,b) * eps => 0.00099 < 1.008*0.001 А тут цисла равны. Что, как мне кажется, правильно. В Вашем же случае, нужно постоянно менять эпсилон, чтобы понимать в каком знаке Вы хотите совпадения. Это сообщение отредактировал(а) Guinness - 1.4.2013, 14:37 |
|||
|
||||
noize |
|
||||
![]() 5.18.2 ![]() Профиль Группа: Участник Сообщений: 89 Регистрация: 10.7.2010 Где: СПб Репутация: нет Всего: 3 |
Crafty, а как же утверждение о том, что стандарт языка гарантирует 6 цифр после мантиссы для float и n-ое количество цифр для double?
Вот такая программка
выдаёт вот такой результат:
|
||||
|
|||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |