spamsink: (Default)
[personal profile] spamsink
(Навеяно http://knop.livejournal.com/380541.html)

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

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

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

Помню, у меня была задача - использовать матицу 5х5 (проще всего), или уложиться в массив 5х1. Время выполнения каждой команды просчитывалось. Сейчас такого вообще не делают, поэтому все и тормозит...

Date: 2014-12-09 03:48 am (UTC)
From: [identity profile] galkao.livejournal.com
Ну и сколько памяти "сожрет" современная библиотека? И сколько там будет реально нужных функций вместо одной-двух?

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

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

Помню, игрушку писала (кстати, до сих пор аналогов моей задумке нет:-), так уперлась в производительность компьютера. Позже, когда переносила эту игрушку на другую "платформу", пришлось специально задерджки по времени сделать. А изначально никаких задержек не требовалось, само по себе работало с нужной скоростью:-) За счет времени выполнения команд. В те времена даже "тетрис" работал на задержках не по времени, а запускали цикл команд:-)

Date: 2014-12-09 04:13 am (UTC)
From: [identity profile] galkao.livejournal.com
Если соберусь написать современный аналог (мой, кстати, до сих пор работает, только надо кое-что подправить, на чистом С написан), то флешовую версию, а не "джваваскриптовую":-)

Date: 2014-12-09 04:31 am (UTC)
From: [identity profile] proxfessor.livejournal.com
int(a/b). Некорректно поставленная задача.

Date: 2014-12-09 04:33 am (UTC)
From: [identity profile] galkao.livejournal.com
Идею могу светить, потому что, если кто-нибудь напишет, - я буду играть:-)

Ну вот представь, что на первом уровне экран поделен на 4 поля. Цвет каждого поля меняется случайно. Чем выше уровень, тем чаще меняются цвета. По всем полям бегает "колобок" (управляется либо стрелками с клавиатуры, либо мышкой). Чем "теплее" цвет поля, тем больше очков зарабатывается. Грубо говоря, выгоднее "съесть" красное поле, чем синее. Поле поедается (гасится, становится черным), когда "колобок" добрался до середины (середина - это не один пиксель, а побольше, примерно размером с колобка:-)

На следующем уровне экран - 3х3 поля, затем - 4х4, 5х5 и т.п.

До этого уровня я сделала, работает. Причем ограничений не было, насколько я помню (на последних уровнях колобок ел любое поле, просто проходя по нему:-)

Что НЕ сделано: хищники. В съеденных (черных) полях должны появляться все хищники из сказки (в зависимости от уровня) и пытаться съесть колобка. Но хищники не могут заходить на цветные поля, которые колобок пока не съел.

Date: 2014-12-09 04:52 am (UTC)
From: [identity profile] bangor-flying.livejournal.com
Меня когда-то поразил тетрис для Атари 800, умещавшийся в десять строк на Бейсике - за счет обращений к умному железу, которое брало всё на себя. Была масса игрушек, которые укладывались даже в 16 килобайт памяти, и на MSX, и на Спектрумах, и на БК, хотя там явно было сложнее программировать, чем на Атари.

Date: 2014-12-09 04:53 am (UTC)
From: [identity profile] proxfessor.livejournal.com
Ах, функцию! Тогда для положительных A и B:

C=0;
while (A>=0) {A-=B;c+=1;}
C-=1;

/* Заменил ++ и -- на +=1 и -=1, чтобы не нарушать правил игры */
Edited Date: 2014-12-09 04:56 am (UTC)

Date: 2014-12-09 04:56 am (UTC)
From: [identity profile] yatur.livejournal.com
Не знаю, у меня такие задачи вызывают радражение. Того нет, сего нет. Того и гляди заставят записать решение левой рукой, прыгая на одной ножке и распевая "Yellow submarine". И не дай Б-г перепутать куплеты или сфальшивить :)

Но операция floor()-то хоть есть? Или ее тоже нет?

Date: 2014-12-09 05:01 am (UTC)
From: [identity profile] proxfessor.livejournal.com
Кстати, 3.4-питоновский оператор // выполняте именно эту операцию, причем не только для целых чисел.

Date: 2014-12-09 05:04 am (UTC)
From: [identity profile] yatur.livejournal.com
Если А=1е100, а В=2, то эта функция войдет в бесконечный цикл, потому что 2е100-2 == 1е100. Разрядов мантиссы не хватает.

Date: 2014-12-09 05:06 am (UTC)
From: [identity profile] galkao.livejournal.com
В свое время на ДВК-3 мы творили чудеса:-) Помню, когда мне на месяц отдали XT поиграть, я с неделю играла, а потом написала "пентрикс". Муж на работу уходил - я еще не спала, муж с работы вернулся - я ему показала пентрикс, "стриптизный" (на каждом уровне девочка-куколка снимала с себя одну из одежек). Тогда я еще ничего не знала про графические форматы, поэтому придумала свой, и удобный редактор под свой формат, чтобы этих "куколок" рисовать:-) За один день! У меня тогда грудной ребенок был, то есть это было написано не за 24 часа, а часов за 5-6:-)

А первый пентрикс, еще черно-белый, но уже графический, мы с мужем в командировке написали. Моя часть была графическая и математическая, его - все остальное.
From: [identity profile] proxfessor.livejournal.com
В условии задачи ничего не говорится о форме представления числа, в частности, о ширине поля мантиссы.
Edited Date: 2014-12-09 05:18 am (UTC)

Date: 2014-12-09 05:18 am (UTC)
From: [identity profile] yatur.livejournal.com
В условиях сказано "с плавающей точкой". Что более-менее автоматически означает, что при большой экспоненте точность представления будет низкой.

Date: 2014-12-09 05:20 am (UTC)
From: [identity profile] proxfessor.livejournal.com
При большой экспоненте "встроенное" целочисленное деление тоже рано или поздно сломается. 64-битный Питон ломается на 1e309//2.

Можно встроить такой "предохранитель":
if (A-B==A) {.....}
Edited Date: 2014-12-09 05:31 am (UTC)

Date: 2014-12-09 06:49 am (UTC)
From: [identity profile] galkao.livejournal.com
Мне нравилось. Увлекательность без "хищников" - в соревновательности. С "хищниками" должно стать интереснее. Но к тому моменту, как я уже нарисовала "хищников" и собралась включить их в игру (почти продумала "математику"), у нас случился очередной переезд, и мне стало не до того. А потом еще и компьютеры малость поменялись, графика изменилась, пришлось сначала все имеющееся переделать, а потом у меня "Запал пропал":-)

Date: 2014-12-09 06:58 am (UTC)
From: [identity profile] fatoff.livejournal.com
Завтра спрошу о передаче сообщений из одного потока в другой, как они себе это представляют.

Date: 2014-12-09 07:06 am (UTC)
From: [identity profile] fatoff.livejournal.com
Кандидаты на позицию в нашей группе.
Ну вот, люди даже знают какие потоки, а вот как бы сделать, чтобы сообщения передавать от одного к другому, полжизни занимались, а сказать затрудняются.

Date: 2014-12-09 09:24 am (UTC)
From: [identity profile] bangor-flying.livejournal.com
Здорово, спасибо за интересный рассказ :)

Date: 2014-12-09 09:51 am (UTC)
From: [identity profile] febb.livejournal.com
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 Date: 2014-12-09 11:27 am (UTC)

Date: 2014-12-09 03:47 pm (UTC)
From: [identity profile] yatur.livejournal.com
Дык поэтому у нас и не армия :)

Date: 2014-12-09 06:15 pm (UTC)
From: [identity profile] febb.livejournal.com
Берёте на работу? :)

Date: 2014-12-09 06:42 pm (UTC)
From: [identity profile] febb.livejournal.com
Хыхыхы)

Date: 2014-12-09 08:32 pm (UTC)
From: [identity profile] knop.livejournal.com
Если я правильно просек фишку, это реализация двоичного алгоритма нахождения НОД...

Date: 2014-12-09 08:33 pm (UTC)
From: [identity profile] knop.livejournal.com
Подписывайтесь на новости в моём ЖЖ, у меня бывают менее программистские и более математические задачки ;-)

Date: 2014-12-09 10:52 pm (UTC)
From: [identity profile] febb.livejournal.com
Я не математек, но спасибо, я посмотрю)

Date: 2014-12-10 10:51 pm (UTC)
From: [identity profile] stalingrad-city.livejournal.com
короткая версия
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 Date: 2014-12-10 10:52 pm (UTC)

Profile

spamsink: (Default)
spamsink

February 2026

S M T W T F S
12345 67
8 91011 121314
15161718 192021
22 2324 25262728

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Mar. 5th, 2026 10:22 pm
Powered by Dreamwidth Studios