【问题标题】:How to programmatically check if a variable is approaching x?如何以编程方式检查变量是否接近 x?
【发布时间】:2012-01-30 15:23:08
【问题描述】:

是否可以检查变量(变量可以是浮点数、双精度数或整数)是否接近某个数字。我做了一些谷歌搜索,但它什么都没有出现。

例如,当 x 变得更负时,n^x 接近于零。

【问题讨论】:

  • “接近”是什么意思?
  • 您是在问是否可以检测到渐近极限
  • 您的输入有点少。您所说的“接近”是什么意思?在什么情况下?
  • 当然有。但恐怕你需要更具体一点。您能向我们展示您到目前为止所做的尝试吗?
  • @tr3:在这种特殊情况下,您没有使用特定的数字。你的意思是abs(newvalue-target) - abs(oldvalue-target) > 0 这会更接近,但仍然不一定会告诉你它是否收敛到那个目标。例如,想象随着 x 变大,询问 1/x 是否接近 -1。 1/x 总是越来越接近 -1,但实际上接近 0。如果不做一些假设,只用一个序列是不可能的。

标签: c# floating-point int double limits


【解决方案1】:

您可以做的最接近的事情是比较变量和目标之间的差异幅度,看看它是否小于您可接受的阈值。严格来说,这不是接近,而是接近(我认为“接近”意味着许多样本正朝着您的目标趋向;这几乎不可能简单地做到,尤其是谐波衰减)。

【讨论】:

    【解决方案2】:

    您可以使用Math.Abs 函数来测量给定值是否接近x:

    double x = ...
    double someVariable = ...
    
    // define the precision you are working with
    double epsilon = 1e-6;
    
    // now test whether someVariable is approaching x
    if (Math.Abs(someVariable - x) < epsilon)
    {
        // someVariable is approaching x given the precision you have defined
    }
    

    【讨论】:

    • -1:不检查函数是否接近值 x。你只检查它是否接近。接近一个价值涉及更多。
    • 我不确定我是否遵循这个答案。对于要接近 x 的东西,它必须在移动,但您似乎只是定义一个值并查看它是否接近目标。或者最后一点是否意味着要包含在某种循环中,如果是这样,您如何确定某物是否在短时间内接近 x?
    • @Dimme,克里斯,你是对的。这只是检查变量是否已经接近给定值。至于接近,我们都在等待OP解释他在做什么,他选择了什么算法来解决问题,他遇到了什么困难,......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-10
    • 2013-05-05
    • 2012-06-14
    • 2012-01-04
    • 2013-10-23
    • 1970-01-01
    相关资源
    最近更新 更多