【问题标题】:Robust comparison of positive/negative numbers value by a threshold value通过阈值对正/负数值进行稳健比较
【发布时间】:2014-09-13 14:21:20
【问题描述】:

我想计算一个变量 average 与另一个变量 trackingAmount 的差异是某个 threshold 是正(+)还是负(-)。

这些是约束:

  • 如果 averagetrackingAmount 之间的差异 (+/-) 超过 threshold value 那么我想触发一个函数 calcMultiTrack()

  • 示例中的阈值称为trackTolerance

  • average 可以是正数或负数,trackingAmount 也是如此

什么是最强大的,(也许优雅在这里是一个更好的词),方式 处理这种情况?

这是我目前所做的。

    average = average / (selItemsDimArray.length - 1); 
    var trackingAmount = 3 
    var trackTolerance = 0.2 

    //If number is positive 
    if (average >= 0) {
        if (average < (trackingAmount - trackTolerance) || average > (trackingAmount + trackTolerance)) {
            calcMultiTrack(); //This is the function I want to call if the numbers are not the same(threshold value applies)
            console.log("Positive average that differs with trackingAmount by more than +- tolerance");
        }
    }
    //Else number is negative
    else {
        if (average < (-(trackingAmount - trackTolerance)) || average > (-(trackingAmount + trackTolerance))) {
            calcMultiTrack();
            console.log("Negative average that differs with trackingAmount by more than +- tolerance");
        }
    }

【问题讨论】:

    标签: javascript coding-style


    【解决方案1】:

    绝对值函数是计算两个实数之间距离的理想方法。

    Math.abs(average - trackingAmount) < threshold
    

    【讨论】:

    • 我认为您的比较运算符是错误的。它应该是>阈值,不是吗?
    • 它没有错,只是不同:) 如果您只关心检查它是否超过阈值,那么您可以使用&gt;,没什么大不了的。
    • 无意冒犯,但我还关心什么?我刚刚做了一个 if (Math.abs(average - trackingAmount) &gt; trackTolerance){calcMultiTrack();} 。如果我使用&gt; 运算符,还有什么意义?
    【解决方案2】:

    通常这种比较是用

    Math.abs(x - expected) < threshold
    

    如果值具有绝对意义并且原点是任意的(例如位置)。

    否则,如果值为正且基于零(例如权重),则通常使用相对距离

    Math.abs(x - expected) / expected < threshold
    

    例如使用threshold = 0.1 表示10% 错误。

    【讨论】:

      猜你喜欢
      • 2017-08-01
      • 2020-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-18
      • 2014-10-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多