Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > Приведение числа к заданному виду


Автор: S3_ 19.1.2012, 18:38
Доброго времени суток.
Есть такая задача, которая, как может показаться, может быть не простой.
Есть вводимые числа, и есть числа определнного формата. Разница между ними только в том, что одни в 10, 100 раз больше (меньше) других. Нужно привести вводимые числа к нужному формату.

Например:
Есть числа (в идеале берется только одно число)
Код

...
0,99
0.98
0.95
0.97
1.01
1.03
...


А вводимые числа могут быть такие (вводится три таких числа):
Код


99.5
98.4
95.0
100.5
105.6


Нужно определить на сколько нужно умножить вторые числа (на 100, 10, 0.1 ... ), что бы они были максимально близки к первым.

Есть идея умножать(делить) на 10 до тех пор, пока разница целых частей не станет <=1, но я не уверен в правильности такого подхода.

В основном прошу совета хода решения, код написать смогу сам  smile 

Автор: Pavia 19.1.2012, 19:06
Берёшь логарифм по основанию 10. От первых чи ел и от вторых.
Из первых вычитаешь вторые. Целый результат и будет степень.
Если процессор логарифмы не умеет считать, то да через умножение и деление.

Автор: volatile 19.1.2012, 23:40
А например число 3.3333
надо интерпретировать, как 3.3333, или как 0.3333 ?  smile 


Автор: _Y_ 20.1.2012, 10:22
Если это просто тренировочная задача, то проще всего, как описал Pavia, через десятичные логарифмы.

Но если задача имеет променение, то стОит обсудить ее практический смысл. Оценка никогда не будет 100% достоверной (см., например, вопрос volatile). Минимизировать же ошибки, наверое, можно, если понимать смысл задачи.

Автор: S3_ 20.1.2012, 11:48
Задача имеет практическое применение.
Надо было сразу наверное написать  smile  Первое число, с которым сравнивать нужно, это рынковая цена. Второе число может быть любым(цена покупки/продажи), но известно что как минимум в 1, 10, 100 вторые чила больше/меньше рынковой.
Например текущая рынковая цена 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
Действительно, хорошее решение. Спасибо за помощь! smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)