Matrix-Klasse double[,]-Array stürzt ab Bitte helft

Kai_Jack

Erfahrenes Mitglied
Hallo Masters,

also ich nutze folgende Matrixklassen http://www.codeproject.com/csharp/Matrix.asp
und frage mich wieso folgender Aufruf zu einer ungültigen Umwandlung führt :
Code:
double[,] d = {{1.0},{2.0},{3.1}};
Matrix A = new Matrix(d);

und dieser hier nicht, obwohl die Methode ja nur überladen wurde. Hat jemand eine Idee, ich komme einfach nicht drauf wo der Fehler liegt
Code:
int[,] intarr={{1,2,3},{1,4,5},{4,5,6}};
Matrix B = new Matrix(intarr);

Dieser Fehler wird ausgegeben:
Code:
 Conversion not possible in dieser Methode: public static Fraction ToFraction(double dValue)

Danke schon mal an alle
Masters of the Compuserve
 
Hi.

Das Problem ist die Konvertierung mittels Stringumwandlung um die Gleitkommazahl 3.1 in einen Bruch umzurechnen:
C#:
string strTemp=dValue.ToString(); // MatrixClass.cs: 900
...
while ( strTemp[i]!='.' ) ++i;
Dabei wird nach einem . als Dezimaltrennzeichen gesucht. Wenn man allerdings das Programm in einer anderen Kultur (Culture/Locale) ausführt, bei dem das Dezimaltrennzeichen z.B. ein Komma ist - so wie in Deutschland - dann funktioniert das nicht mehr und es wird eine Ausnahme geworfen weil dann über die Grenzen des Strings hinaus zugegriffen wird.

Du kannst das z.B. so ändern:
C#:
string strTemp = dValue.ToString(System.Globalization.NumberFormatInfo.InvariantInfo);
Dann sollte es funktionieren.

Gruß
 
Vielen Dank, das geht jetzt.

Aber ich hätte da noch etwas:

wieso kann die double Variante eine Zahl wie diese nicht akzeptieren

Code:
12.787544444

Das müsste doch noch double entsprechen

Danke an die Masters of the Compuserve:)
 
Oh sorry,


das hier:

Code:
Conversion not possible due to overflow

folgt aus diesem hier

Code:
double[,] di ={{12.78754444555,1.12566,1.12566},{2.23555,1.12566,1.12566},{3.12444,1.12566,1.12566}};



Ab der 8 Nachkommastelle geht der Fehler los.

JAck ;-]
 
Der double wird ja wie schon gesagt in einen Bruch umgerechnet der dann aus 2 long besteht (Zähler und Nenner). Allerdings wird (warum auch immer) in Zeile 917 auf einen int gecastet der ja deutlich zu klein ist für die Zahl 1278754444555.

Ändere mal Zeile 917 so:
C#:
frac=new Fraction( (long)Math.Round(dTemp), iMultiple);
Gruß
 
Genial,

das geht supi jetzt. Dankeschön


Ein anderes Thema mit dem ich mich ewig rumschlage:
Ich schreibe gerade eine doppelt verkette Linkliste um. Bisher bietet sie nur eine einfache Kette, einen Vorgänger- und Nachfolgerknoten an.

Ich möchte gerne viele Vorgänger und Vachfolger haben. Also habe ich das als Array realisiert, wo Vorgänger und Nachfolger des aktuellen Knotens gespeichert werden.

Problem: der Iterator und Enumerator gehen dadurch natürlich nicht mehr. Meinst du wenn ich Quellcode poste das da jemand hilft? Wenigstens beim vorwärts traversieren, den Rest würde ich dann bestimmt selber kapieren.

Grüße und vielen Dank von JAck:)
 
Kai_Jack hat gesagt.:
Genial,

das geht supi jetzt. Dankeschön
Bitteschön. :)
Kai_Jack hat gesagt.:
Ein anderes Thema mit dem ich mich ewig rumschlage:
Ich schreibe gerade eine doppelt verkette Linkliste um. Bisher bietet sie nur eine einfache Kette, einen Vorgänger- und Nachfolgerknoten an.

Ich möchte gerne viele Vorgänger und Vachfolger haben. Also habe ich das als Array realisiert, wo Vorgänger und Nachfolger des aktuellen Knotens gespeichert werden.

Problem: der Iterator und Enumerator gehen dadurch natürlich nicht mehr. Meinst du wenn ich Quellcode poste das da jemand hilft? Wenigstens beim vorwärts traversieren, den Rest würde ich dann bestimmt selber kapieren.
Ich würde es jedenfalls mal probieren; ich denke da wird sich schon jemand finden.

Allerdings wird das nicht so einfach werden. Du solltest dir mal überlegen wie du dir die Reihenfolge indem die Elemente durchlaufen werden sollen vorstellst.

Gruß
 
Die Reihenfolge steht bereits fest:

Ich programmiere Ameisenalgorithmenbasierte Lösungen für einen Knotenplan. Dies bedeutet es gibt immer einen einzelnen Start- und Endknoten zu Beginn und Ende der Liste, quasi Head und Tail. Alle anderen Knoten können mehrere in der Anzahl sein.

Entscheidung: Über eine zufällig generierte Zufallszahl und in Anlehung an eine Wahrscheinlichkeitsformel für jeden Knoten entsteht die Laufrichtung, das bedeutet wenn zwei Nachfolgeknoten nach dem Head z.B. p1= 0.7 und p2=0.3 haben, die zufällig generierte Zufallszahl 0.6 beträgt, geht die Ameise den Knoten p1 entlang.

Wichtig ist noch das die Liste nun vorher feststeht, es müssen also keine Knoten entfernt oder hinzugefügt werden, das macht die Iteration wesentlich einfacher denke ich.

Wo denkst du sollte ich dieses Problem am ehesten Posten, also Forumbezogen meine ich?

Danke nochmal für deine Hilfe
JAck :)
 
Aha. Dann ist es ja doch nicht so schwierig, wenn du nur einen Knoten von den Nachbarknoten auswählen willst.

Ich denke das .NET/Café wäre das richtige Forum.

Gruß
 

Neue Beiträge

Zurück