?

Log in

No account? Create an account

Если бы рекрутёром был я... - Общество дровосеков Бердичева по изучению Мишны

Dec. 8th, 2014

06:50 pm - Если бы рекрутёром был я...

Previous Entry Share Next Entry

(Навеяно http://knop.livejournal.com/380541.html)

...то при любом собеседовании на программистские должности, требующие математических способностей хотя бы в минимальной степени, соискатели получали бы у меня следующий вопрос.

Реализуйте на любом языке или псевдокоде операцию целочисленного деления с помощью операций с плавающей точкой. Обсудите возможные проблемы.

Comments:

[User Picture]
From:galkao
Date:December 9th, 2014 03:16 am (UTC)
(Link)
Я в свое время перестала программировать, потому что подобные функции стали "библиотечными". Скучно:-) Скажем, лет 30 назад генератор псевдослучайных чисел каждый делал сам для себя, и потом нужно было еще доказать, что он является генератором псевдослучайных чисел. А сейчас - подключил библиотиеку, и все на блюдечке с голубой каемочкой. Сколько памяти жрет - никого не волнует:-) Это мы в 56К умудрялись укладываться, при программировании в реальном времени.

Помню, у меня была задача - использовать матицу 5х5 (проще всего), или уложиться в массив 5х1. Время выполнения каждой команды просчитывалось. Сейчас такого вообще не делают, поэтому все и тормозит...
(Reply) (Thread)
[User Picture]
From:spamsink
Date:December 9th, 2014 03:37 am (UTC)
(Link)
Программировать как раз удобнее, когда большинство функций - "библиотечные", чтобы не тратить время на переизобретение велосипеда по десять раз на дню. А при приеме на работу полезно узнать, на каком уровне соискатель понимает, как оно там внутри работает; в самом грубом приближении: понимает ли хоть как-то, или оперирует магическими заклинаниями методом проб и ошибок.
(Reply) (Parent) (Thread)
[User Picture]
From:galkao
Date:December 9th, 2014 03:48 am (UTC)
(Link)
Ну и сколько памяти "сожрет" современная библиотека? И сколько там будет реально нужных функций вместо одной-двух?

Мне в свое время при максимуме в 56К на все нужно было уложиться в 5 секунд на все вычисления. Я не знаю, какими средствами это делают сейчас (да, производительность компьютеров сильно повысилась!), но дали бы мне в два раза больше памяти тогда - я бы делала чудеса:-) Даже при той же производительности:-)

А сейчас - скучно!

Помню, игрушку писала (кстати, до сих пор аналогов моей задумке нет:-), так уперлась в производительность компьютера. Позже, когда переносила эту игрушку на другую "платформу", пришлось специально задерджки по времени сделать. А изначально никаких задержек не требовалось, само по себе работало с нужной скоростью:-) За счет времени выполнения команд. В те времена даже "тетрис" работал на задержках не по времени, а запускали цикл команд:-)
(Reply) (Parent) (Thread) (Expand)
(Deleted comment)
[User Picture]
From:spamsink
Date:December 9th, 2014 04:40 am (UTC)
(Link)
Нет операции int.
Более строго, нужно написать вещественную функцию от двух вещественных аргументов, которая, в тех случаях, когда оба вещественных аргумента численно равны неким целым числам А и В соответственно, в качестве результата возвращает число, численно равное результату целочисленного деления А на В. Поведение во всех прочих случаях произвольно.
Из арифметики можно пользоваться только четырьмя действиями с плавающей точкой и сравнениями.

Edited at 2014-12-09 04:49 am (UTC)
(Reply) (Parent) (Thread)
(Deleted comment)
(Deleted comment)
(Deleted comment)
(Deleted comment)
[User Picture]
From:yatur
Date:December 9th, 2014 04:56 am (UTC)
(Link)
Не знаю, у меня такие задачи вызывают радражение. Того нет, сего нет. Того и гляди заставят записать решение левой рукой, прыгая на одной ножке и распевая "Yellow submarine". И не дай Б-г перепутать куплеты или сфальшивить :)

Но операция floor()-то хоть есть? Или ее тоже нет?
(Reply) (Parent) (Thread) (Expand)
[User Picture]
From:fatoff
Date:December 9th, 2014 06:58 am (UTC)
(Link)
Завтра спрошу о передаче сообщений из одного потока в другой, как они себе это представляют.
(Reply) (Thread)
[User Picture]
From:spamsink
Date:December 9th, 2014 07:00 am (UTC)
(Link)
Кто "они"?
(Reply) (Parent) (Thread)
[User Picture]
From:fatoff
Date:December 9th, 2014 07:06 am (UTC)
(Link)
Кандидаты на позицию в нашей группе.
Ну вот, люди даже знают какие потоки, а вот как бы сделать, чтобы сообщения передавать от одного к другому, полжизни занимались, а сказать затрудняются.
(Reply) (Parent) (Thread)
[User Picture]
From:febb
Date:December 9th, 2014 09:51 am (UTC)
(Link)
double Int(double x)
{
if (x > 1.0)
{
double c = 2.0 * Int(x / 2.0);
if((x - c) >= 1.0) return c + 1.0;
return c;
}
if(x < 1.0) return 0.0;
return 1.0;
}
main()
{
double a, double b;
double int_result = Int(a/b);
}

Edited at 2014-12-09 11:27 am (UTC)
(Reply) (Thread)
[User Picture]
From:spamsink
Date:December 9th, 2014 04:20 pm (UTC)
(Link)
Это даже еще математичнее, чем я имел в виду.
(Reply) (Parent) (Thread)
[User Picture]
From:febb
Date:December 9th, 2014 06:15 pm (UTC)
(Link)
Берёте на работу? :)
(Reply) (Parent) (Thread) (Expand)
[User Picture]
From:knop
Date:December 9th, 2014 08:32 pm (UTC)
(Link)
Если я правильно просек фишку, это реализация двоичного алгоритма нахождения НОД...
(Reply) (Parent) (Thread) (Expand)
[User Picture]
From:stalingrad_city
Date:December 10th, 2014 10:51 pm (UTC)
(Link)
короткая версия
double Int(double x)
{
	double origx = x;
	double result = .0;

	while(x>1.0) x/=2.0;

	while(x<origx) {
		x*=2.0;
		result*=2.0;
		if(x-result>=1.0) result+=1.0;
	}

	return result;
}


еще более математичный вариант через переодичные функции, и обратные

вроде такого, без подробностей ( функции через разложение Тэйлора )
result = x - atan2( cos(2pi*x), sin(2pi*x) ) / 2*pi


Edited at 2014-12-10 10:52 pm (UTC)
(Reply) (Parent) (Thread) (Expand)