Algorithm 自定义加权秤

Algorithm 自定义加权秤,algorithm,math,language-agnostic,Algorithm,Math,Language Agnostic,在任何编程语言中,我都需要一个公式,它能给我一个最终可以排序的值。我有两个变量: 变量1=只是一些任意计数(可能是0、1、5、20、50、100) 变量2=自当前日期起经过的天数(可以是0、1、2、50、100) 我需要一个加权自定义公式,其中: 从当前日期起0-30天内,变量1(计数)以100%重量开始,变量2以0%重量开始。随着每天持续30天,变量1的权重在第30天下降到50%,变量2(经过的天数)在第30天从0%增加到50% 从当前日期起的31-60天内,变量1开始从50%增加到100%,

在任何编程语言中,我都需要一个公式,它能给我一个最终可以排序的值。我有两个变量:

  • 变量1=只是一些任意计数(可能是0、1、5、20、50、100)
  • 变量2=自当前日期起经过的天数(可以是0、1、2、50、100)
  • 我需要一个加权自定义公式,其中:

  • 从当前日期起0-30天内,变量1(计数)以100%重量开始,变量2以0%重量开始。随着每天持续30天,变量1的权重在第30天下降到50%,变量2(经过的天数)在第30天从0%增加到50%
  • 从当前日期起的31-60天内,变量1开始从50%增加到100%,在第60天达到峰值,变量2开始减少到0,并在第60天变为0
  • 第60天之后,变量1始终为100%,变量2显然为0%

  • fabs
    为返回浮点绝对值的函数。 那么公式可以如下所示:

    function calcRank(float v1, float v2) {
        float k = fabs(v2-30.0);
        if (k < 30.0) {
            // Rule 1 and 2
            rank = k/60.0 + (60.0-k) * v1 / 60.0;
        } else {
            // Rule 3
            rank = v1;
        }
        return rank;
    }
    
    功能calcRank(浮点v1、浮点v2){
    浮点数k=fabs(v2-30.0);
    如果(k<30.0){
    //规则1和2
    秩=k/60.0+(60.0-k)*v1/60.0;
    }否则{
    //规则3
    秩=v1;
    }
    返回等级;
    }
    
    使用哪种编程语言?如果你只是需要一个数学公式,那么你的网站就错了。如果你把鼠标悬停在上面并阅读标记wiki摘要,这是一个与数学相关的通用标记。它必须附有语言标签。仅仅因为标签存在,并不意味着它可以自己使用。我不是在问关于生命意义的问题。这个问题准确地表达了对任何编程语言中的数学公式的需求。这个问题是@TimJohnson。如果你想讨论你能做些什么来改进这篇文章,一个很好的地方就是元讨论。谢谢。我注意到一件事,如果v1是10,v2从10天变为20天,你会得到:1)abs(10-30)/60.0+(60.0-abs(10-30))*10/60.0=72)abs(20-30)/60.0+(60.0-abs(20-30))*10/60.0=8.5我认为第一个应该更高,不是吗?这是我的错,因为我没有澄清,在我的情况下,随着时间的推移,v1保持不变,排名应该更低,而不是更高。此外,如果v2保持不变,v1增加,排名也应该更高。上面的公式不能解释这一点,显然是因为我忘了把它包括在内。如果你能更新公式,我希望你能使用
    rank=(60.0-k)*v1/60.0