我想通过给定值检查两个数字是否在彼此的范围内。
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非常相似。
答案 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 + deviation
和input2
之间。使用隐式括号,它看起来像这样:
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);
}