[2/3] gdiplus: fix GdipPathIterNextMarker behaviour on path without markers. fix tests.

Nikolay Sivov bunglehead at gmail.com
Sun Jul 13 04:51:29 CDT 2008

Reece Dunn wrote:
> 2008/7/13 Nikolay Sivov <bunglehead at gmail.com>:
>> What do you think about matrix comparison or in general float comparison
>> implementation? What is the best way to implement this. We have two
>> cases now:
>> 1. GdipIsMatrixEqual which compares two matrices (with simple bitwise
>> operation now)
> Is this the way it works on Windows? You have 4 basic cases:
> a.  exactly equal;
> b.  equal + epsilon for rounding/representation errors;
> c.  equal - epsilon for rounding/representation errors;
> d.  not equal.
> The code at the moment covers a and d (is there a test for d?), but
> what about b and c? These would be useful, because if the Windows
> version of GdipIsMatrixEqual *is* catering for error of a given
> epsilon, then you can use that function for validation. If not, you
> have tests that prove that Windows is using a simplistic comparison
> method.
Exactly, so I plan to test this deeper on native. As I see now after 
some basic tests, most probably native call does a bitwise comparison 
cause the result is affected by a smallest matrix element change (e.g. 
1.0000000f -> 1.0000001f). But I'll test it more. Reece, do you have any 
suggestions to do some bounds test (I mean test is call affected by 
representation or round errors or not)?
>> 2. GdipIsMatrixInvertible which contains a check for 'not above zero'
>> determinant.
> It has been a while since I have done any matrix math. I'll assume
> that the above is the correct definition/check for invertible (makes
> sense because you have inv(a(ij)) = a(ij)/det(A), so can't have det(A)
> == 0).
> Now here, you have several 'classes' of matrices w.r.t. whether they
> are invertible or not:
> a.  det(A) > 0
> b.  det(A) == 0
> c.  det(A) < 0
> So does Windows match your assumption for the answer to these (a ==>
> yes; b, c ==> no).
What do you mean here by (c => no)? Native allows negative det and I do so.
>> I think first of all we should choose an appropriate method to do so and
>> only after that try to compare results with native. What do you think of
>> that?
> Are you saying that GdipIsMatrixInvertible should be used for
> comparison of two matrices? If so, you can have two different matrices
> that are invertible, so it does not make sense.
Where did I say that? It's weird.
> A good first step would be to print out the expected and returned
> values for the matrices, and keep the GdipIsMatrixEqual check. This
> will allow you to determine if the reason this is failing is due to
> rounding errors, or that they are completely different results.
> - Reece
With last patch marked 'try3' 
test and crosstest work for me cause there aren't affected by 
representation errors using det == 16..

More information about the wine-devel mailing list