There are two basic types, variables and constants.
The variables are one of:
a - count of bits on in fp1, not on in fp2 b - count of bits on in fp2, not on in fp1 c - count of bits on in both fp1 and fp2 d - count of bits off in both fp1 and fp2
Constants are always double-precision numbers expressed as either a whole number or a decimal number (exponent notation is not supported). Examples include: 1, 1.0, 1.00004, 243.333.
Unary Operators are (x refers to any valid subexpression):
-x Negation sqrt(x) Square root
Binary Operators are (x1 and x2 refer to valid subexpressions):
x1+x2 Addition x1-x2 Subtraction x1*x2 Multiplication x1/x2 Division x1^x2 Raise x1 to the x2 power min(x1,x2) Minimum max(x1,x2) Maximum
Parentheses are used to modify operator association (left-to-right) and precedence from the default:
- Unary negation ^ Exponentiation *, / Multiplication/division +, - Binary addition/subtraction
In addition to the above, the expression evaluator recognizes the following built-in named expressions:
TANIMOTO - c/(a+b+c) EUCLID - sqrt((c+d)/(a+b+c+d)) DICE - (2.0*c)/((a+c)+(b+c)) COSINE - c/sqrt((a+c)*(b+c)) KULCZYNSKI - 0.5*((c/(a+c))+(c/(b+c))) JACCARD - c/(a+b+c) RUSSELL/RAO - c/(a+b+c+d) MATCHING - (c+d)/(a+b+c+d) HAMMAN - ((c+d)-(a+b))/(a+b+c+d) ROGERS/TANIMOTO - (c+d)/((a+b)+(a+b+c+d)) FORBES - (c*(a+b+c+d))/((a+c)*(b+c)) SIMPSON - c/min((a+c),(b+c)) PEARSON - (c*d-a*b)/sqrt((a+c)*(b+c)*(a+d)*(b+d)) YULE - (c*d-a*b)/(c*d+a*b) MAHNATTAN - (a+b)/(a+b+c+d)