In der Methode compare wird einfach der Kosinus des Winkels zwischen jedem Paar von Spalten addiert und diese Kosinussummen werden dann verglichen. Dieser Vergleich wird nicht immer das gleiche zurückliefern wie ein tatsächlicher Vergleich vom Rang zweier Matrizen. Hier ist ein Gegenbeispiel:
Code: Alles auswählen
/ 1 2 \
A = | |
\ 3 4 /
/ 5 6 \
B = | |
\ 7 8 /
Damit der Algorithmus wirklich das tut, was er behauptet zu tun, sollten die Kosinuswerte nicht aufsummiert werden, sondern nur die Kosinuswerte, die 0 (oder nicht 0) sind zählen. Die Matrix, die mehr Kosinuswerte mit dem Wert 0 hat, hat dann den höheren Rang (diese Anzahl ist aber nicht einfach der Rang). Vielleicht sollte man dann auch alle Werte mit einem Betrag von weniger als z.B. 2^-10 als 0 zählen, um Gleitkommaungenauigkeiten auszugleichen.