was macht diese if Bedingung

Gast #2315756
Lesenswert?

Hallo,

Ich habe einige fragen zu der folgenden Funktion aus einer Matrix Lib.
 - kann mir jemand sagen, für welche Matrixoperation die funktion da 
ist.
 - was unterscheidet die Bedingung am ende der funktion?
 - wie kann man diese if Bedingung in C# umsetzen?
1
double matrix3D::minor(int col,int ver) const
2
{
3
  double matrix[3][3];
4

5
  int dstCol,dstVer;
6
  dstCol=0;
7
  for(int srcCol=0;srcCol<4;srcCol++)
8
  {
9
    dstVer=0;
10
    if(srcCol==col)
11
    {
12
      srcCol++;
13
      if(srcCol>3)
14
        break;
15
    }
16
    for(int srcVer=0;srcVer<4;srcVer++)
17
    {
18
      if(srcVer==ver)
19
      {
20
        srcVer++;
21
        if(srcVer>3)
22
          break;
23
      }
24
      if(dstCol>2 || dstVer>2)
25
        THROW_ERROR(VALUE_OUT_OF_RANGE);
26

27
      matrix[dstCol][dstVer]=coeffs[srcCol][srcVer];
28
      dstVer++;
29
    }
30
    dstCol++;
31
  }
32

33
    if((col+ver)&1)   // was fragt die bedingung ab
34
    return -det3x3(matrix);
35
  else
36
    return det3x3(matrix);
37
}

danke
Gast #2315766
Lesenswert?

if((col+ver)&1)

das & ist ein bitweises UND.
Die Summe von col und ver wird also mit einer 1 verundet ( wenn du dir 
das auf Bitebene ansiehst wirst du sehen, was damit bezweckt wird ).
In C# geht es genauso. Die Bitoperatoren gibt es da auch.
Gast #2315814
Lesenswert?

sorry hatte die klammer vergessen...


D:\ASUS\Eigene Dokumente\Visual Studio 
2008\Projects\cncviewer2\cncviewer2\datentypen\matrix3D.cs(364,13): 
Fehler CS0029: Eine implizite Konvertierung vom Typ "int" in "bool" ist 
nicht möglich.
Gast #2315823
Lesenswert?

tobi schrieb:
> Fehler CS0029: Eine implizite Konvertierung vom Typ "int" in "bool" ist
> nicht möglich.

Ok ... es liegt daran, dass
((col + ver) & 1)
eine integer-Variable ist.
Ein Vergleich braucht aber einen bool-Typen ( true oder false ).

In C werden Zahlen ungleich 0 als true betrachtet, 0 als false.
C# braucht eine genauere Differenzierung:
if (((col + ver) & 1) == 1)
(das kann man in dem Fall machen, da bei der Verundung mit 1 nur 0 oder 
1 rauskommen kann)
Persönliche Seite #2315895
Lesenswert?

tobi schrieb:
>  - was unterscheidet die Bedingung am ende der funktion?
> ...
>     if((col+ver)&1)   // was fragt die bedingung ab

Es geht um die Berechnung der Determinante bzw. deren Vorzeichen,
irgendwas in der Gegend von (det3x3 ist geheim)

http://de.wikipedia.org/wiki/Determinante#Berechnung
http://de.wikipedia.org/wiki/Adjunkte

Es berechnet den Term
aus dem zweiten Artikel.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren