aboutsummaryrefslogtreecommitdiffstats
path: root/src/hal/components/near.comp
blob: 531c21b0c71c35163ba275da83f0a87c97dc5544 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
component near "Determine whether two values are roughly equal.";
pin in float in1_;
pin in float in2_;
param rw float scale=1;
param rw float difference=0;
pin out bit out """
\\fBout\\fR is true if \\fBin1\\fR and \\fBin2\\fR are within a factor of
\\fBscale\\fR (i.e., for in1 positive, in1/scale <= in2 <= in1*scale), OR
if their absolute difference is no greater than \\fBdifference\\fR (i.e.,
|in1-in2| <= difference).  \\fBout\\fR is false otherwise.""";
function _;
license "GPL";
author "Chris Radek";
;;
#include "rtapi_math.h"
FUNCTION(_) {
	double in1 = in1_, in2 = in2_;
	if(in1 < 0) {
		in1 = -in1;
		in2 = -in2;
	}
	if((scale > 1 && in1/scale <= in2 && in2 <= in1*scale) || fabs(in1-in2) <= difference) {
		out = 1;
	}
	else {
		out = 0;
	}
}
bues.ch cgit interface