Здравствуйте, FirstStep, Вы писали:
FS>Здравствуйте, Доктор ТуамОсес, Вы писали:
ДТ>>Правильно. ДТ>>А как же вторая часть вопроса ("почему?")? ДТ>>Сможете объяснить почему 2.75?
FS>Потому что 2.75 представимо в виде суммы целых степеней двойки:
FS>2.75 = 2^1 + 2^(-1)+ 2^(-2)
Браво
Вы успешно прошли собеседование.
Беру Вас к себе.
Здравствуйте, 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 минут.. соответственно есть предположение что спрашивающий хотел более хитрый вариант
Здравствуйте, 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 минут.. соответственно есть предположение что спрашивающий хотел более хитрый вариант
Не думаю, скорее просто хотели проверить насколько рука набита код с логикой писать. Если на работе ничего кроме клепания формочек не делаешь, то с этим имхо могут быть сложности.
Здравствуйте, Доктор ТуамОсес, Вы писали:
ДТ>>>А как же вторая часть вопроса ("почему?")?
А практическая польза данного упражнения есть ?
1/3 тоже записать в виде конечной десятичной дроби нельзя, но на практике это ни кому не мешает.
До не давнего времени, мне вот все равно было на формат представления double в памяти, только в связи с вашим заданием посмотрел.
Так что бы задание было корректным давайте претендентам описания этого формата. imho
Здравствуйте, 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).
Здравствуйте, 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 первых значимых разрядов и степень Что-то точностью тут и не пахнет...
даст нам степень в которую надо возвести 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 тут нам нужна только степень
тут уже можно поиграться с простым смещнием десятичной точки,
Здравствуйте, baxton_ulf, Вы писали:
_>Здравствуйте, shrecher, Вы писали: S>>...
Любые операции с double дадут нам неточные вычисления.
По-моему уже кто-то писал. Длинная арифметика + log(Y) возведение в степень, а в качестве умножений вспомогательных в log алго для степени — Карацуба.
Здравствуйте, shrecher, Вы писали:
S>Как такой вопрос на собеседовании, был задан на позиции C++ разработчика?
не в Акронисе ли задают такие вопросы на собеседовании?
спрашиваю потому что как то получил от них тестовое такого содержания:
Задание: необходимо вывести введенное 10-тичное число словами на русском языке в 8-ми и 10-ной системах. Например.
Вводим: 131
Выводим:
сто тридцать один в десятичной системе;
двести три в восьмеричной системе.
При проектировании подумайте о том, как ваше решение можно было бы локализовать на английский язык (тут обратите внимание, например, на цифру "двести", которая на английском будет состоять из двух слов).
Укажите, сколько времени у вас заняло выполнение этого задания.
Я знаю, как управлять Вселенной. И скажите, зачем же мне бежать за миллионом?!(c)
On 19.08.2011 11:04, kuzmaprutkov2 wrote:
> A>так оно в double конвертируется > Эм... дабл держит 16 первых значимых разрядов и степень Что-то точностью тут и > не пахнет...
On 18.08.2011 23:05, Доктор ТуамОсес wrote:
> *Есть код: > > double x = 2.30; > double y = 2.75; > > > > Вопрос:Какая переменная реально получит то значение, которое написано в её > инициализаторе?
Так всё просто. Никакая.
Потому что бинарная дробь -- лишь приблизительное представление десятичной.
Ну тут вроде бы 2.75 представимо в виде конечной бинарной дроби, а 2.30
(7/3) -- нет, поэтому первая не получит точно то значение, вторая -- получит.