Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Алгоритмы > Приведение числа к заданному виду |
Автор: S3_ 19.1.2012, 18:38 | ||||
Доброго времени суток. Есть такая задача, которая, как может показаться, может быть не простой. Есть вводимые числа, и есть числа определнного формата. Разница между ними только в том, что одни в 10, 100 раз больше (меньше) других. Нужно привести вводимые числа к нужному формату. Например: Есть числа (в идеале берется только одно число)
А вводимые числа могут быть такие (вводится три таких числа):
Нужно определить на сколько нужно умножить вторые числа (на 100, 10, 0.1 ... ), что бы они были максимально близки к первым. Есть идея умножать(делить) на 10 до тех пор, пока разница целых частей не станет <=1, но я не уверен в правильности такого подхода. В основном прошу совета хода решения, код написать смогу сам ![]() |
Автор: Pavia 19.1.2012, 19:06 |
Берёшь логарифм по основанию 10. От первых чи ел и от вторых. Из первых вычитаешь вторые. Целый результат и будет степень. Если процессор логарифмы не умеет считать, то да через умножение и деление. |
Автор: volatile 19.1.2012, 23:40 |
А например число 3.3333 надо интерпретировать, как 3.3333, или как 0.3333 ? ![]() |
Автор: _Y_ 20.1.2012, 10:22 |
Если это просто тренировочная задача, то проще всего, как описал Pavia, через десятичные логарифмы. Но если задача имеет променение, то стОит обсудить ее практический смысл. Оценка никогда не будет 100% достоверной (см., например, вопрос volatile). Минимизировать же ошибки, наверое, можно, если понимать смысл задачи. |
Автор: S3_ 20.1.2012, 11:48 |
Задача имеет практическое применение. Надо было сразу наверное написать ![]() Например текущая рынковая цена 1.05. Босс говорит купить только по цене 99.5 (присылает цену в другом формате или таком же), тоесть пока цена не упадет до 0.995. Задача заключается в преобразовании второй цены. |
Автор: _Y_ 20.1.2012, 13:12 |
S3_, из примера получается, что икомое значение (0.995) отличается от "опорного" (1.05) не в разы. В этом случае логарифмический подход будет работать без проблем. Ошибки будут начинаться при разнице где-то в 3 раза и больше (0.5 по логарифмической шкале). |
Автор: S3_ 20.1.2012, 13:57 |
Действительно, хорошее решение. Спасибо за помощь! ![]() |