A family of Microsoft spreadsheet software with tools for analyzing, charting, and communicating data.
PS.... I wrote:
(Resubmitted with a more relevant example.)
On second thought, the (deleted) simpler example might be helpful.
Consider the following:
Note that the only difference between the formulas in B3 and B4 is the order of the addition.
Both B3 and B4 appear to be 1 when they are formatted to display 15 significant digits, which is all that Excel formats (rounded).
So B3=B4 in D3 returns TRUE.
But in fact, the binary value of B3 is infinitesimally different, as shown in C3.
So, ISNUMBER(MATCH(B3,B4,0)) returns FALSE in E3.
We might understand the difference if Excel displayed up to 17 significant digits, rounded.
C6:C8 display the exact decimal representation of the binary values of the constants in B6:B8, highlighting the first 15 and 17 significant digits.
And C3 displays the exact decimal representation of the binary value in B3.
The exact decimal values differ from the constants because most decimal fractions cannot be represented exactly in 64-bit binary floating-point. They must be approximated by the sum of 53 consecutive powers of 2. And the approximation of a particular decimal fraction might vary depending on the magnitude of the number. That is why, for example, 10.1 - 10 = 0.1 returns FALSE (!).
So, rounded to 17 significant digits, C3 would display 0.99999999999999989 instead of 1.
The difference between D3 (TRUE) and E3 (FALSE) is a misleading quirk of Excel (and work-alike apps).
For comparison operators (e.g. "="), Excel rounds both operands to 15 significant digit internally just for the purpose of the comparison.
Since B3 rounds to 1, it appears to be the same as B4.
But for match and lookup functions (and others), Excel compares the exact binary value.
Since the binary value of B3 is different, MATCH returns #N/A instead of 1.
As to exactly why the order of adding binary approximations of decimal fractions might cause different results, honestly the explanation is TMI.
In a nutshell, it has to do with "normalizing" and rounding internal 80-bit binary arithmetic to 64-bit binary results after each arithmetic operation.