There is a dnA bug report that the sparse matrix is returning differing results for Gram–Schmidt than a dense matrix. The problem boils down to that any value (in absolute) less than 2.220e-16 (epsilon) is automatically treated as zero.
This is also how we've implemented AlmostZero in Math.NET Numerics.
I'm wondering if this is correct. The AlmostEqual methods are correct if the values being tested are greater than one. But does it hold for values less than one?
Using a common why to compute machine epsilon:
var epsilon = 1.0;
epsilon /= 2.0;
} while (1.0 + (epsilon / 2.0) != 1.0);
Console.WriteLine(1.0 == 1.0 + (epsilon / 2));
Console.WriteLine(1.1234567890123456 == 1.1234567890123456 + (epsilon / 2));
Console.WriteLine(0.0 == 0.0 + (epsilon / 2));
Console.WriteLine(0.9 == 0.9 + (epsilon / 2));
The first two print statments print true as expected, but not the last two.
I'm I missing something really obvious?