繁体   English   中英

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

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

我想知道如何为巨大的不同值的计算设置权重。 我会尝试更好地解释它,或者更详细地解释它。

这个想法是:我希望得到一个在这个范围 [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 位小数(因此比 a 大 1)

其中,例如给定 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' 的最低有效数(在本例中为 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来翻译。

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

你看过对数吗?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM