Re: Вопрос на собеседовании
От: Доктор ТуамОсес Гондурас Мой новый проект "ВЕПРЬ-1"
Дата: 18.08.11 19:05
Оценка:
Вот Вам ещё "вопрос на собеседовании" (взят из готовящегося сейчас мной к опубликованию нового бильда СБОРНИКА ВОПРОСОВ ПО С++:

Есть код:

double x = 2.30;
double y = 2.75;


Вопрос:Какая переменная реально получит то значение, которое написано в её инициализаторе?
И почему?

Мой новый проект "ВЕПРЬ-1"
Re[2]: Вопрос на собеседовании
От: Доктор ТуамОсес Гондурас Мой новый проект "ВЕПРЬ-1"
Дата: 18.08.11 21:57
Оценка:
Ну так чо? Народ?
Сможете ответить?
Мой новый проект "ВЕПРЬ-1"
Re[3]: Вопрос на собеседовании
От: engine_  
Дата: 18.08.11 22:24
Оценка:
Здравствуйте, Доктор ТуамОсес, Вы писали:

ДТ>Ну так чо? Народ?

ДТ>Сможете ответить?
2.75
это только в с++?
Re[4]: Вопрос на собеседовании
От: Доктор ТуамОсес Гондурас Мой новый проект "ВЕПРЬ-1"
Дата: 18.08.11 22:59
Оценка:
Здравствуйте, engine_, Вы писали:

_>Здравствуйте, Доктор ТуамОсес, Вы писали:


ДТ>>Ну так чо? Народ?

ДТ>>Сможете ответить?
_>2.75


Правильно.
А как же вторая часть вопроса ("почему?")?
Сможете объяснить почему 2.75?
Мой новый проект "ВЕПРЬ-1"
Re[5]: Вопрос на собеседовании
От: FirstStep Россия  
Дата: 18.08.11 23:25
Оценка:
Здравствуйте, Доктор ТуамОсес, Вы писали:

ДТ>Правильно.

ДТ>А как же вторая часть вопроса ("почему?")?
ДТ>Сможете объяснить почему 2.75?

Потому что 2.75 представимо в виде суммы целых степеней двойки:

2.75 = 2^1 + 2^(-1)+ 2^(-2)
Re[6]: Вопрос на собеседовании
От: Доктор ТуамОсес Гондурас Мой новый проект "ВЕПРЬ-1"
Дата: 19.08.11 01:25
Оценка: :)
Здравствуйте, FirstStep, Вы писали:

FS>Здравствуйте, Доктор ТуамОсес, Вы писали:


ДТ>>Правильно.

ДТ>>А как же вторая часть вопроса ("почему?")?
ДТ>>Сможете объяснить почему 2.75?

FS>Потому что 2.75 представимо в виде суммы целых степеней двойки:


FS>2.75 = 2^1 + 2^(-1)+ 2^(-2)


Браво
Вы успешно прошли собеседование.
Беру Вас к себе.

А также всех талантливых программистов желающим «встать у истоков» самой мощной в истории вселенной софтверной корпорации.
http://webcache.googleusercontent.com/search?q=cache:wRGrcvZBgSwJ:forum.sources.ru/index.php%3Fshowtopic%3D284923%26st%3D210+%22%D1%81%D0%B0%D0%BC%D0%BE%D0%B9+%D0%BC%D0%BE%D1%89%D0%BD%D0%BE%D0%B9+%D1%81%D0%BE%D1%84%D1%82%D0%B2%D0%B5%D1%80%D0%BD%D0%BE%D0%B9+%D0%BA%D0%BE%D1%80%D0%BF%D0%BE%D1%80%D0%B0%D1%86%D0%B8%D0%B8%22&cd=2&hl=ru&ct=clnk&gl=ru&source=www.google.ru
http://hghltd.yandex.net/yandbtm?fmode=inject&url=http%3A%2F%2Fforum.sources.ru%2Findex.php%3Fshowtopic%3D313252%26st%3D0&text=%22%D0%96%D0%B5%D0%BB%D0%B0%D1%8E%D1%89%D0%B8%D0%BC%20%C2%AB%D0%B2%D1%81%D1%82%D0%B0%D1%82%D1%8C%20%D1%83%20%D0%B8%D1%81%D1%82%D0%BE%D0%BA%D0%BE%D0%B2%C2%BB%22&l10n=ru&mime=html&sign=3e6b1675267e3babae3db2109e2ba3ee&keyno=0
http://hghltd.yandex.net/yandbtm?fmode=inject&url=http%3A%2F%2Fforum.sources.ru%2Findex.php%3Fshowtopic%3D315537%26st%3D15&text=%22%D0%96%D0%B5%D0%BB%D0%B0%D1%8E%D1%89%D0%B8%D0%BC%20%C2%AB%D0%B2%D1%81%D1%82%D0%B0%D1%82%D1%8C%20%D1%83%20%D0%B8%D1%81%D1%82%D0%BE%D0%BA%D0%BE%D0%B2%C2%BB%22&l10n=ru&mime=html&sign=93d6158a82a71459aecf5edfdd6121ff&keyno=0
Мой новый проект "ВЕПРЬ-1"
Re[4]: Вопрос на собеседовании
От: a_g_barnaul Россия  
Дата: 19.08.11 02:55
Оценка:
Здравствуйте, vb-develop, Вы писали:

VD>Здравствуйте, shrecher, Вы писали:


S>>Здравствуйте, ZOI4, Вы писали:


ZOI>>>Здравствуйте, shrecher, Вы писали:


ZOI>>>В общем как-то так, если непонятно, то сорри, вечер после рабочего дня — моска уже нет.


S>>Возможно это и так. Меня больше интересует адекватность этого вопроса. Его задали моему знакомому и мы тут спорили о смысле спрашивать такое. За много лет прогерской жизни я ни разу не писал ничего подобного. Как-то лавки стали спрашивать что-то очень мудреное, видать разворот строки уже всем надоел


VD>Да это ж школьная задача, реализовать перемножение двух длинных чисел. В тривиальном случае хранишь по одному десятичному разряду в элементе массива, и перемножаешь как на листочке.



так для интереса на бумажке наваял этот вариант, не знаю мож в том и суть что задачу надо решить более хитро но этот тупой вариант пишется за 7 минут=)
String sumLong(String A, String B); // бежим с конца, переводим текущие цифры в int плюсуем между собой и с запомненным переносом если остался с прошлой суммы, ну и в результирующую строку(перенос сохраняем.
тоды:
String mulLong(String A, String B); // sumlong в цикле:A+A+... B раз.
String powLong(String A, String B); // mullong в цикле:A*A*... B раз.

на бумажке полный вариант занял 6-7 минут.. соответственно есть предположение что спрашивающий хотел более хитрый вариант
Re[5]: Вопрос на собеседовании
От: vb-develop  
Дата: 19.08.11 04:24
Оценка:
Здравствуйте, a_g_barnaul, Вы писали:

VD>>Да это ж школьная задача, реализовать перемножение двух длинных чисел. В тривиальном случае хранишь по одному десятичному разряду в элементе массива, и перемножаешь как на листочке.



__>так для интереса на бумажке наваял этот вариант, не знаю мож в том и суть что задачу надо решить более хитро но этот тупой вариант пишется за 7 минут=)

__>String sumLong(String A, String B); // бежим с конца, переводим текущие цифры в int плюсуем между собой и с запомненным переносом если остался с прошлой суммы, ну и в результирующую строку(перенос сохраняем.
__>тоды:
__>String mulLong(String A, String B); // sumlong в цикле:A+A+... B раз.
__>String powLong(String A, String B); // mullong в цикле:A*A*... B раз.

__>на бумажке полный вариант занял 6-7 минут.. соответственно есть предположение что спрашивающий хотел более хитрый вариант


Не думаю, скорее просто хотели проверить насколько рука набита код с логикой писать. Если на работе ничего кроме клепания формочек не делаешь, то с этим имхо могут быть сложности.
Re[7]: Вопрос на собеседовании
От: -Dm-  
Дата: 19.08.11 04:46
Оценка:
Здравствуйте, Доктор ТуамОсес, Вы писали:

ДТ>>>А как же вторая часть вопроса ("почему?")?



А практическая польза данного упражнения есть ?
1/3 тоже записать в виде конечной десятичной дроби нельзя, но на практике это ни кому не мешает.
До не давнего времени, мне вот все равно было на формат представления double в памяти, только в связи с вашим заданием посмотрел.
Так что бы задание было корректным давайте претендентам описания этого формата. imho
Re: Вопрос на собеседовании
От: Centaur Россия  
Дата: 19.08.11 04:56
Оценка: 4 (1) +2
Здравствуйте, shrecher, Вы писали:

S>Как такой вопрос на собеседовании, был задан на позиции C++ разработчика?


S>Написать код на доске для функции:


S>string Power( int X, short Y) // вернуть строчное представление результата X в степени Y 
S>{



S>}

Это вопрос на наличие bullshit detector’а. Когда задают такой вопрос, ждут, что ты будешь спрашивать про ограничения. Как минимум — переспросишь, действительно ли они хотят от тебя, чтоб ты реализовал им bignum; и если да, то почему бы не принимать аргументы бигнумами, в какой системе счисления должен быть результат, и требуется ли обрабатывать случаи (X!=0 && Y<0), (X=0 && Y=0) и (X=0 && Y<0).
Re[4]: Вопрос на собеседовании
От: kuzmaprutkov2  
Дата: 19.08.11 07:04
Оценка:
Здравствуйте, Abyx, Вы писали:

A>Здравствуйте, ilnar, Вы писали:


I>>Здравствуйте, Abyx, Вы писали:


A>>>Здравствуйте, shrecher, Вы писали:


A>>>
A>>>string Power( int X, short Y) // вернуть строчное представление результата X в степени Y 
A>>>{
A>>>   return lexical_cast<string>(pow(X, Y));
A>>>}
A>>>


A>>>в чем проблема?


I>>при такой реализации в ограниченном множестве X,Y


A>так оно в double конвертируется

Эм... дабл держит 16 первых значимых разрядов и степень Что-то точностью тут и не пахнет...
Re: Вопрос на собеседовании
От: baxton_ulf США  
Дата: 19.08.11 07:14
Оценка:
Здравствуйте, shrecher, Вы писали:
S>...

а если как-нить так
Y*lg(X)

даст нам степень в которую надо возвести 10 чтоб получить X^Y

пример
INT_MAX=2147483648
SHRT_MAX=32767
32767*log(2147483648) = 305779.34590557182653062605326656

грубо:
10^305779 * 10^0.345 ==> 10^305779 * 2.2130947096056377223339809093626

для 10^0.345 double сгодиться
10^305779 тут нам нужна только степень

тут уже можно поиграться с простым смещнием десятичной точки,
Re[2]: Вопрос на собеседовании
От: kuzmaprutkov2  
Дата: 19.08.11 07:20
Оценка:
Здравствуйте, baxton_ulf, Вы писали:

_>Здравствуйте, shrecher, Вы писали:

S>>...

Любые операции с double дадут нам неточные вычисления.
По-моему уже кто-то писал. Длинная арифметика + log(Y) возведение в степень, а в качестве умножений вспомогательных в log алго для степени — Карацуба.
Re: Вопрос на собеседовании
От: sumson Россия  
Дата: 19.08.11 07:22
Оценка:
Здравствуйте, shrecher, Вы писали:

S>Как такой вопрос на собеседовании, был задан на позиции C++ разработчика?


не в Акронисе ли задают такие вопросы на собеседовании?
спрашиваю потому что как то получил от них тестовое такого содержания:

Задание: необходимо вывести введенное 10-тичное число словами на русском языке в 8-ми и 10-ной системах. Например.

Вводим: 131
Выводим:
сто тридцать один в десятичной системе;
двести три в восьмеричной системе.

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

Укажите, сколько времени у вас заняло выполнение этого задания.
Я знаю, как управлять Вселенной. И скажите, зачем же мне бежать за миллионом?!(c)
Re: Вопрос на собеседовании
От: MasterZiv СССР  
Дата: 19.08.11 07:26
Оценка:
On 18.08.2011 21:04, shrecher wrote:

> string Power(int X,short Y)// вернуть строчное представление результата X в степени Y

> {
>
>
>
> }

Ну так. Стандартная pow + boost::lexical_cast
(или snprintf или std::sting_stream)
Posted via RSDN NNTP Server 2.1 beta
Re[2]: Вопрос на собеседовании
От: kuzmaprutkov2  
Дата: 19.08.11 07:28
Оценка:
Здравствуйте, MasterZiv, Вы писали:

MZ>Ну так. Стандартная pow + boost::lexical_cast

MZ>(или snprintf или std::sting_stream)

Стандартная pow загибается после 16 разряда значимого =)
Re[5]: Вопрос на собеседовании
От: MasterZiv СССР  
Дата: 19.08.11 07:29
Оценка: :)
On 19.08.2011 11:04, kuzmaprutkov2 wrote:

> A>так оно в double конвертируется

> Эм... дабл держит 16 первых значимых разрядов и степень Что-то точностью тут и
> не пахнет...

А кто сказал, что она тут нужна ?
Posted via RSDN NNTP Server 2.1 beta
Re[2]: Вопрос на собеседовании
От: MasterZiv СССР  
Дата: 19.08.11 07:38
Оценка:
On 18.08.2011 23:05, Доктор ТуамОсес wrote:

> *Есть код:

>
> double x = 2.30;
> double y = 2.75;
>
>
>
> Вопрос:Какая переменная реально получит то значение, которое написано в её
> инициализаторе?

Так всё просто. Никакая.
Потому что бинарная дробь -- лишь приблизительное представление десятичной.

Ну тут вроде бы 2.75 представимо в виде конечной бинарной дроби, а 2.30
(7/3) -- нет, поэтому первая не получит точно то значение, вторая -- получит.
Posted via RSDN NNTP Server 2.1 beta
Re[4]: Вопрос на собеседовании
От: MasterZiv СССР  
Дата: 19.08.11 07:39
Оценка:
On 19.08.2011 2:24, engine_ wrote:

> 2.75

> это только в с++?

Это везде, где double хранится в виде конечной бинарной дроби.
Posted via RSDN NNTP Server 2.1 beta
Re[2]: Вопрос на собеседовании
От: MasterZiv СССР  
Дата: 19.08.11 07:41
Оценка: -1 :)
On 19.08.2011 8:56, Centaur wrote:

> Это вопрос на наличие bullshit detector’а. Когда задают такой вопрос, ждут, что


Не угадал. Это вопрос на наличие базового образования в IT.
Posted via RSDN NNTP Server 2.1 beta
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.