簡體   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