Может ли кто-нибудь помочь мне решить алгоритм? (Установите вес большого значения диапазона)

Мне было интересно, как установить вес для вычисления огромных разных значений. Я постараюсь объяснить это лучше, или, может быть, в деталях.

Идея такова: я хотел бы получить в результате значение в этом диапазоне [1,20]: 1) первое значение: a 1a) с форматом вроде 0,1 или 0,0001 или 0,00001 и т. д. 1b) максимальная десятичная длина = 5 десятичные знаки 2) второе значение: b 2a) предположение, что меньше, чем a (если a=0,01, по крайней мере, b=0,00999 и т. д.) 2b) с тем же форматом 2c) максимальная десятичная длина = 6 знаков после запятой (на 1 больше, чем a)

где, например, a=0,01 и b=0,0001

x = a/b = 100

второй пример a=0,01 и b=0,00001

x = a/b = 1000

Я подумал примерно так: если максимум может быть (когда a=0,1 и b=0,000001) = 100000, то он соответствует 20 (новая максимальная шкала), и если я посчитаю разницу количества десятичных знаков, я могу сказать, что: a' имеет 1 десятичный знак 'b' имеет 6 десятичных знаков. В общем, у нас может быть максимальная разница в 5, поэтому:

max = 5

Итак, используя это исчисление:

diff=6-1=5

чтобы их доля (a/b) соответствовала максимальному значению (20), я могу сделать: (diff*20)/max дайте мне 20. Это нормально. Теперь, если у меня есть a = 0,1 и b = 0,000002, я могу использовать наименее значимое число «b» (в данном случае «2» из 0,000002) и сравнить с наименее значимым из «a», и я могу сказать, что

diff=6-1=5

Теперь вычтите 0,2 (поскольку наименее значимое число было 2), чтобы получить 4,8. Теперь пересчитаем:

4.8*20/max = 19.2

Таким образом, для 0,1 и 0,000003 будет

diff=6-1=5
diff=diff-0.3 = 4.7
4.7*20/max = 18.8

И так далее.

Проблема в том, что когда у меня есть a=0,3 и b=0,0002 (например), я не знаю, как с этим справиться.

Может ли кто-нибудь предложить мне решение или кучу этого, даже с псевдокодом или процедурой? Возможно, я сам сделаю перевод на java.

Я не знаю, куда написать свой вопрос, если да, то я действительно извиняюсь, если я ошибаюсь в некоторых правилах этого сайта, в остальном все в порядке :-) Всем спасибо


person Aerox    schedule 14.11.2015    source источник
comment
безусловно, худший объясненный вопрос, который я когда-либо видел на StackOverflow. что такое x - ваш ответ? Вы пытаетесь зажать/масштабировать x, чтобы он соответствовал диапазону?   -  person    schedule 14.11.2015
comment
Я не носитель английского языка, я не специалист по математике, я задал этот вопрос ночью, я болен, и я не специалист в объяснении того, что мне не очень понятно. Так что, если вы хотите оскорбить, хорошо, не стесняйтесь, или, если этот вопрос является позором, не стесняйтесь сообщить о моем вопросе администратору или модераторам. Если вы предпочитаете критиковать мой вопрос, я думаю, что было бы более конструктивно, если бы вы указали на каждую проблему, которая у меня есть. Объяснять проблемы на другом языке непросто, так что извините за это...   -  person Aerox    schedule 14.11.2015


Ответы (1)


Вы смотрели на логарифмы?

 d = (log(a) - log(b))/log(10)

должен дать ответ. Другими словами, log(a)/log(10) дает вам

0.1   -->  -1
0.01  -->  -2
0.001 -->  -3 

и т. д. Таким образом, вы можете вычислять различия так, как хотите. И в конце,

exp(d*log(10))

это фактическое соотношение. В Java используйте Math.log()

person Sanjay Manohar    schedule 14.11.2015
comment
Большое спасибо за Вашу помощь. Вот что я пропустил! Логи не возникали у меня в голове, не знаю почему. В любом случае, я ценю вашу помощь в моем странном вопросе. Теперь я могу придумать что-нибудь получше с вашим разъяснением. Еще раз спасибо и извините за плохое объяснение моего вопроса/проблемы. Я отмечаю (или отмечаю, я не знаю, как сказать) ваш ответ как правильный. - person Aerox; 14.11.2015