谁能帮我解决一个算法? (设置一个大范围值的权重)

Could anyone help me on solve an algorithm? (Set a weight of a big range value)

我想知道如何为巨大的不同值的计算设置权重。我会尽力解释得更好,或者可能更详细。

想法是: 结果我想得到这个范围 [1,20] 内的值: 1)第一个值:一个 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' 有一位小数 'b'有6位小数 一般来说我们最多可以相差5,所以:

max = 5

所以使用这个微积分:

diff=6-1=5

为了将它们的分数 (a/b) 对应为最大值 (20) 我可以这样做: (diff*20)/max给我20,没关系。 现在,如果我有 a=0.1 和 b=0.000002 我可以使用 'b' 的最低有效数(在本例中为 0.000002 的“2”)并与 '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。

我不知道在哪里 post 我的问题,如果是的话,如果我错了这些网站的一些规则,我真的很抱歉,否则一切都很好:-) 谢谢大家

你看过对数吗?

 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()