检查两个数字是否彼此接近

时间:2018-04-27 12:24:18

标签: c

我想通过给定值检查两个数字是否在彼此的范围内。

boolean withinRange(double input1, double input2, double deviation){

//input1 will always be the biggest value
  if(input1 > input2){
    //do nothing
  } else if(input1 < input2) {
    double temp = input1;
    input1 = input2;
    input2 = temp;
  } else if(input1 == input2){
    return true;
  }

  if(input2 + deviation < input1 - deviation < input2){
    return true;
  } else {
    return false;
  }
}

所以像withinRange(2,3,2)这样的输入应该是真的,但是内部范围(1,4,2)应该是假的。我知道代码是错误的,但我不知道如何解决它。它用Arduino编码,与C非常相似。

4 个答案:

答案 0 :(得分:2)

通常这样做很简单:

bool withinRange(double input1, double input2, double deviation)
{
  return fabs(input1 - input2) <= deviation;
}

请注意,C布尔类型称为bool。我编辑的答案包括边界,这更直观,因此可以更容易验证。

基本上减法的绝对值是两个项之间的距离,所以我们计算它并将其与极限进行比较。

答案 1 :(得分:2)

这不符合你的想法:

if(input2 + deviation < input1 - deviation < input2){

C中的表达式与数学方程式不同。 检查input1 - deviation是否在input2 + deviationinput2之间。使用隐式括号,它看起来像这样:

if(((input2 + deviation) < (input1 - deviation)) < input2){

首先检查(input2 + deviation) < (input1 - deviation)是否为真。然后将此比较的结果(0或1)与input2进行比较。

编写上述表达式的正确方法是:

if (((input2 + deviation) < (input1 - deviation)) && ((input1 - deviation) < input2)) {

但这仍然没有做你想要的事情。由于您将input1规范化为大于input2,因此您只需要:

if ((input1 - input2) <= deviation) {

请注意,使用<=可以确切地接受deviation的差异。

答案 2 :(得分:1)

double out = num1 - num2;
if(out < 0) out *= -1;
if(out <= deviation)
    return true;
else return false;

这应该有效。您也可以尝试检查哪个数字更大,然后根据需要进行交换。

答案 3 :(得分:0)

您只需检查一个数字是否在另一个数字+/-范围的范围内:

boolean withinRange(double input1, double input2, double deviation)
{
    return (input1 - deviation <= input2 && input2 <= input1 + deviation);
}