besseren (sprechenden) Namen einfallen lassen.
rename basicNumber (to what?)?
implizite TNum Initialisierung nur über den dazugehörigen Ring - mal sehen
Skalar Datentyp abhängig von der Characteristik wählen - ist prinzipiell moeglich
folgende Frage klaeren:<cstdint>) and use the 'int_fastX_t'
als TScalar nur primitive Datentypen zulassen und dies prüfen. Wieso? ->
besseren Klassennamen einfallen lassen.
ensure that 'memset()' is correct implemented on a given architecture
drop this code and use 'pair' with fast_polynomXY or polynomXY, if it is fast enough.
maxDegree dynamisch und statisch
output is independent from polynom implementation,
was ist mit getDegree() und getMaxDegree(): soll man das unterscheiden oder nicht? Und wie soll das Umgesetzt werden?
koeff public?? bin ich wahnsinnig??? Bessere Lösung?
in den Initialisierungsfunktionen die Convert-Funktion nutzen!
initInv überarbeiten!
herausfinden, welchen Datentyp wir nach der -Operation haben und ob es Probleme bei unsigned Datentypen gibt.
vernuenftige Loesung fuer epsPrecision>0.
testen , ob angegebene Charakteristik eine Primzahl ist - Merkt man das nicht spaetestens wenn es keinen Erzeuger gibt?
multiplyOnCPU einfuehren bzw multiplyByHand
Idee: shift index bei generischer Version - hätte vielleicht Vorteile, da schneller addiert werden kann. Hm, warum wird die Optimierte Version ohne Addition nicht schneller? Schliesslich wird der Platz für den Pointer auf die Additionstabelle frei.
ueberpruefen, ob man nicht ohne die funktionen mit parametern 'passed by reference' auskommen kann, d.h. ob dies nicht wesentlich die performance verschlechtert, und wie man bei 'pass by value'-parametern und Rückgabewerten unnötiges Kopieren verhindern kann.
The interfaces of number_eps1 nnumber_eps0 and epsZahl should be identical!
: Fehlertest für die ausreichende Dimensierung der Datentype (insb. TScalar) bereits zur Kompilezeit durchführen
wieso heisst die Datei fflas und die Matrix FFpackMatrix ? /
statt int rows unsigned int rows...u.s.w.
.getValue aus dieser FKT rauswerfen.
implement a RowByRow Matrix iterator
do not create new Field F everytime
do not create new Field F everytime
bei zusammengesetzten Typen bei getX() und getEPS keinen primitiven Datentyp zurueckliefern, sondern einen mit Memberfunktionen wie z.B. isZero.
wenn eine Initialisierung von TNum unter Umgehung des Rings geschehen soll, muss das über einen expliziten Konstruktor-Aufruf erfolgen, der Fehlerfreiheit zuliebe!
WICHTIG Dokumentation unter stud.uni-hannover.de stellen, weil es so in der README steht!
Ordner c-program/jobs mit den beispieljobs verschieben
die Datei 'common.mk' im Ordner c-program ist nicht mehr aktiv! - Loeschen!
maxLift und liftTrials muss parametrisiert werden können und nicht von cfparams_m abgefragt.
Idee, um den Zugriff nur auf bestimmte Parameter von cfParams zu erlauben ( nicht maxLift und nicht liftTrials): in einer auf den liftTest zugeschnittenen Schnittstelle cfParams kapseln.
eventuell eine Unterklasse bilden, welche für eine feste Anzahl verschwundener Strudelgrößen die Ränge der Jacobi-Matrizen zählt.
bessere Parameternamen im Konstruktor und diese dokumentieren, sowohl in BaseRankStatistic als auch in RankAndLiftStatistic.
note the max possible value for jacobian rank?
is in CheckAllMonoms() something wrong? /
Python Skript schreiben, um Ergebnisse zusammenzuzaehlen - TEILWEISE ERLEDIGT /
Ueberlegen, wie verschiedene Programmdurchlaeufe verwaltet werden sollen. /
command line options parser popt or gengetopt! /
benenne CenterfocusParams um in centerFocusParams? /
eventuell Fortschrittsanzeige (das Programm tut was) /
: hier mit OpenMP parallelisieren, geht an dieser Stelle nur, falls es sich nicht um ein Zufallsexperiment handelt. Strategie: lese mehrere Polynome und starte parallel die Auswertung und gebe die Ergebnisse synchronisiert aus.
optional: diese Klasse so entwerfen, dass diese Funktion nur existiert, falls man inFailedLiftNr beobachten will.
ueberall, wo
epsPrecision vom Ring für Quadrikberechnung muss hoechstens 2 sein!
ist jetzt de Matrix C jacobiCoKernelTransposed oder jacobiCoKernel?
eventuell Funktion in zwei Teile aufteilen - 1. wird R_i berechnet 2. wird eine Basis (R_i ) berechnet.
ist jetzt de Matrix C jacobiCoKernelTransposed oder jacobiCoKernel?
eventuell Funktion in zwei Teile aufteilen - 1. wird R_i berechnet 2. wird eine Basis (R_i ) berechnet.
die Funktion getLeftInverse hier raus und in die zugehoerige Matrix packen
FFPACK parameter Modular<double> irgendwo einmal Zentral definieren
die Funktion getLeftInverse hier raus und in die zugehoerige Matrix packen
FFPACK parameter Modular<double> irgendwo einmal Zentral definieren
: kopiere mit Genauigkeit 0 oder 1 ? -> mit 0, sonst wird der Lift-Test nicht bestanden !
da die beiden For-schleifen in createJacobiMatrix fast identisch sind, diese als unterfunktion auslagern
da die beiden For-schleifen in createJacobiMatrix fast identisch sind, diese als unterfunktion auslagern
: kopiere mit Genauigkeit 0 oder 1 ? -> mit 0, sonst wird der Lift-Test nicht bestanden !
da die beiden For-schleifen in createJacobiMatrix fast identisch sind, diese als unterfunktion auslagern
die Konstante 2 (erster Monomgrad oder minPolynomGrad ) nicht ueberall im Quelltext verteilt, sondern fest)
die coeffVariablesOrder_m_initialisierung koennten sogar die Parameter vornehmen...
endlich den Iterator ueber PQ-Elemente schreiben!
gehoert diese Funktion nicht eventuell in ReadCenterFocusParams?
it seems that one check for Hamilton Component is missing - nope, das sind Alle Bedingungen! xPunkt ist gleich H/dy und yPunkt ist gleich -H/dx -> daraus folgen die Bedingungen
Formel ist nur Korrekt für Grad 3. Für allgemeinen Grad muss ginac eingesetzt werden. Momentan nur Korrekt für Grad 2 und Grad 3.
it seems that one check for Hamilton Component is missing - nope, das sind Alle Bedingungen! xPunkt ist gleich H/dy und yPunkt ist gleich -H/dx -> daraus folgen die Bedingungen
Formel ist nur Korrekt für Grad 3. Für allgemeinen Grad muss ginac eingesetzt werden. Momentan nur Korrekt für Grad 2 und Grad 3.
TESTS: Test überlegen, ob epsPrecision vom epsRing korrekt ist.
optimierung: copyPolynomWithGivenEpsPrecision muss man nicht immer wieder fuer ein SingleTest durchfuehren
TESTS: Test überlegen, ob epsPrecision vom epsRing korrekt ist.
optimierung: copyPolynomWithGivenEpsPrecision muss man nicht immer wieder fuer ein SingleTest durchfuehren
optimierung: copyPolynomWithGivenEpsPrecision muss man nicht immer wieder fuer ein SingleTest durchfuehren
Unterscheide zwischen PolynomGrad und hoechster moeglicher Exponent? Fuer z.B. kann ein PolynomObjekt monome mit Grad 3 enthalten / (wurde so z.B. in der Eingabe definiert), aber alle Koeffizienten der Monome mit grad 3 sind 0. Strenggenommen ist also Grad dann 2 (was aber in unserem Programm / von keinem Interesse ist) /
eigentlich ist es Quatsch, den Polynomtyp fuer das Zufallsexperiment offen zu lassen. Es sollte halt TFrommer2::TPolynomXY sein und Basta. /
Zeiger auf const oder Referenz uebergeben.
Polynome bekommen eine Initialisierungsfunkton mit epsPrecision als Parameter, oder diese Klasse bekommt die Initialisierungsfuntion
man braucht nicht un
Problem: cfparams_m->getPolynomialDegree() muss nicht unbedingt mit cfparams_m->pPoynim konsistent sein (ergibt Redundanz der Information und somit ein potenzielles Konsistenzproblem)
Frage: wieso wird hier epsFrommer_m uebergeben und nicht ???
RankStatistic und LiftAndQuadricsStatistic als 'pair'
kann noch etwas optimiert werden, wenn die Jacobi-Matrizen gleichzeitig erzeugt werden.
: Optimierung: hier reicht immer frommer1.getRingRef.setEpsPrecision = 0 ! Die Strudelgroessen werden spaeter noch mal berechnet, und das sollte dann mit der korrekten epsGenauigkeit erfolgen!
Ergebnisse eines Experiments in ein Objekt packen...
kann noch etwas optimiert werden, wenn die Jacobi-Matrizen gleichzeitig erzeugt werden.
: Optimierung: hier reicht immer frommer1.getRingRef.setEpsPrecision = 0 ! Die Strudelgroessen werden spaeter noch mal berechnet, und das sollte dann mit der korrekten epsGenauigkeit erfolgen!
Ergebnisse eines Experiments in ein Objekt packen...
kann noch etwas optimiert werden, wenn die Jacobi-Matrizen gleichzeitig erzeugt werden.
: Optimierung: hier reicht immer frommer1.getRingRef.setEpsPrecision = 0 ! Die Strudelgroessen werden spaeter noch mal berechnet, und das sollte dann mit der korrekten epsGenauigkeit erfolgen!
Ergebnisse eines Experiments in ein Objekt packen...
ueberlegen, wie man die Ausgabe vom Algorithmus besser trennen kann... ueberlegt: Define Class for generated result structure -> and attach output functions (in Output.h) to that class!
NextElement funktion wird in der Zukunft doch gebraucht, gehoert dann aber in diese Klasse und nicht in in TRing.
bHasVariableCoefficients_m gesondert initialisieren, hier nur prüfen, ob nur ein Zufallsexperiment definiert wurde.
hier ist noch wichtiger, dass wenn es keine '*'-Koeffizienten, sondern ebenfalls nur 'A'-Koeffizienten gibt, ebenfalls getRequestedTrialsNum=0 sein muss.
bHasVariableCoefficients_m gesondert initialisieren, hier nur prüfen, ob nur ein Zufallsexperiment definiert wurde.
hier ist noch wichtiger, dass wenn es keine '*'-Koeffizienten, sondern ebenfalls nur 'A'-Koeffizienten gibt, ebenfalls getRequestedTrialsNum=0 sein muss.
eine fortgeschrittene Methode wäre Semaphore zu nutzen.
Ausgabereihenfolge der Parameter an einer Stelle festlegen.
: Frage: kann der InputFileStream auch vom String als Eingabe in der Form (mehrfach))gelesen werden?
eine fortgeschrittene Methode wäre Semaphore zu nutzen.
Ausgabereihenfolge der Parameter an einer Stelle festlegen.
: Frage: kann der InputFileStream auch vom String als Eingabe in der Form (mehrfach))gelesen werden?
: Frage: kann der InputFileStream auch vom String als Eingabe in der Form (mehrfach))gelesen werden?
eine fortgeschrittene Methode wäre Semaphore zu nutzen.
Ausgabereihenfolge der Parameter an einer Stelle festlegen.
: Frage: kann der InputFileStream auch vom String als Eingabe in der Form (mehrfach))gelesen werden?
NonSmoothPointPassFilter oder NonSmoothPointPassFilter
NonSmoothPointPassFilter oder NonSmoothPointPassFilter
NonSmoothPointPassFilter oder NonSmoothPointPassFilter
endlich den Iterator ueber PQ-Elemente schreiben!
endlich den Iterator ueber PQ-Elemente schreiben!
Schleifenvertauschung darf hier nicht stattfinden!
endlich den Iterator ueber PQ-Elemente schreiben!
Schleifenvertauschung darf hier nicht stattfinden!
endlich den Iterator ueber PQ-Elemente schreiben!
endlich den Iterator ueber PQ-Elemente schreiben!
Schleifenvertauschung darf hier nicht stattfinden!
endlich den Iterator ueber PQ-Elemente schreiben!
was passiert mit dem Wert von ExperimentTag hier genau ? Dokumentieren. trims ExperimentTag
was passiert mit dem Wert von ExperimentTag hier genau ? Dokumentieren. trims ExperimentTag
was passiert mit dem Wert von ExperimentTag hier genau ? Dokumentieren. trims ExperimentTag
charakteristik kleiner irgendwas festlegen und charakteristik auf irreduzibitität pruefen!
charakteristik kleiner irgendwas festlegen und charakteristik auf irreduzibitität pruefen!
charakteristik kleiner irgendwas festlegen und charakteristik auf irreduzibitität pruefen!
: die assert-Bedingung parametrisieren.
: die assert-Bedingung parametrisieren.
: die assert-Bedingung parametrisieren.
: irgendwie hast du diese Funktion vermurkst...
: irgendwie hast du diese Funktion vermurkst...
: irgendwie hast du diese Funktion vermurkst...
diese Funktion gehoert nicht in die Klasse Parameterlist !
Parameterlist::outputParameter funktion ueberarbeiten...
diese Funktion gehoert nicht in die Klasse Parameterlist !
Parameterlist::outputParameter funktion ueberarbeiten...
Wie prueft man die Kompatibilitaetsbedingung TRing::ElementType == PolynomXY_Type::ElementType, welche hier erfuellt sein muss weiss ich jetzt ! mit typeinfo!
Wie prueft man die Kompatibilitaetsbedingung TRing::ElementType == PolynomXY_Type::ElementType, welche hier erfuellt sein muss weiss ich jetzt ! mit typeinfo!
Wie prueft man die Kompatibilitaetsbedingung TRing::ElementType == PolynomXY_Type::ElementType, welche hier erfuellt sein muss weiss ich jetzt ! mit typeinfo!
use parser Generator - this Parser can't check syntax correctness. Implement /
wenn schon, dann sollten die Polynome p,q und die Struktur RandomcoeffList, AllcoeffList hier per Referenz übergeben werden! /
readNextPolynoms sollte einen Stream als Parameter bekommen !
use parser Generator - this Parser can't check syntax correctness. Implement /
wenn schon, dann sollten die Polynome p,q und die Struktur RandomcoeffList, AllcoeffList hier per Referenz übergeben werden! /
readNextPolynoms sollte einen Stream als Parameter bekommen !
use parser Generator - this Parser can't check syntax correctness. Implement /
wenn schon, dann sollten die Polynome p,q und die Struktur RandomcoeffList, AllcoeffList hier per Referenz übergeben werden! /
readNextPolynoms sollte einen Stream als Parameter bekommen !
0. Stufe locking nur für einen festen Benutzer. Realisierungsmöglichkeiten: Lockfile fest verdrahtet
1. Stufe locking nur nur Benutzerweit. Realisierungsmöglichkeiten: Lockfile dynamisch ermittelt oder über Umgebungsvariable festgelegt.
2. Stufe locking Dateisystemweit. Voraussetzung: alle Benutzer haben das gleiche Lockfile gesetzt. Frage: Funktioniert locking über sshfs-Grenzen hinweg?
0. Stufe locking nur für einen festen Benutzer. Realisierungsmöglichkeiten: Lockfile fest verdrahtet
1. Stufe locking nur nur Benutzerweit. Realisierungsmöglichkeiten: Lockfile dynamisch ermittelt oder über Umgebungsvariable festgelegt.
2. Stufe locking Dateisystemweit. Voraussetzung: alle Benutzer haben das gleiche Lockfile gesetzt. Frage: Funktioniert locking über sshfs-Grenzen hinweg?
0. Stufe locking nur für einen festen Benutzer. Realisierungsmöglichkeiten: Lockfile fest verdrahtet
1. Stufe locking nur nur Benutzerweit. Realisierungsmöglichkeiten: Lockfile dynamisch ermittelt oder über Umgebungsvariable festgelegt.
2. Stufe locking Dateisystemweit. Voraussetzung: alle Benutzer haben das gleiche Lockfile gesetzt. Frage: Funktioniert locking über sshfs-Grenzen hinweg?
nun, der Name stimmt nicht ganz, es wird nicht nur defined_PolynomXY_Type gesetzt, sondern auch monomsWithRandomCoefficients und monomsWithAllCoefficients
das Einlesen
nun, der Name stimmt nicht ganz, es wird nicht nur defined_PolynomXY_Type gesetzt, sondern auch monomsWithRandomCoefficients und monomsWithAllCoefficients
das Einlesen
nun, der Name stimmt nicht ganz, es wird nicht nur defined_PolynomXY_Type gesetzt, sondern auch monomsWithRandomCoefficients und monomsWithAllCoefficients
das Einlesen
define a structure like {p,q, monomsWithAllCoefficients, monomsWithRandomCoefficients} - belongs together.
: Problem: infEps_minusP_polynom_m kann eventuell nicht definiert sein.
define a structure like {p,q, monomsWithAllCoefficients, monomsWithRandomCoefficients} - belongs together.
: Problem: infEps_minusP_polynom_m kann eventuell nicht definiert sein.
define a structure like {p,q, monomsWithAllCoefficients, monomsWithRandomCoefficients} - belongs together.
: Problem: infEps_minusP_polynom_m kann eventuell nicht definiert sein.
Warnung ausgeben, falls keine Variablen variiert werden und subJacobiMatrixRank>0
separate Parameters and Work Data
wenn es sich um kein Zufallsexperiment handelt, darf useformula2 und useformula23 und useformula1 nicht gesetzt sein!
Elemente von TRing und von TPolynomXY_Type muessen zueinander passen, ueberlegen, wie dies sichergestellt, bzw. geprueft wird. geht eventuell mit typeid( A )==typeid( a ), und hash include <typeinfo>
reengineer this not very well-designed class
RingTyp wird eventuell in jedem Ringelement gespeichert. Problem; charaktteristik wird dadurch nicht festgehalten...
wieso nicht CenterfocusParams mit TFrommer parametrisieren ? das Ding enthaelt doch sowohl TPolynomXY als auch TRing
RingType und TPolynomXY sollten sich aus tParams ableiten lassen. / Zugriff auf f1_ring_ref_m und cfparams_m.
Optimierung waere nicht nur, wenn man getMonomsWithRandomCoefficients als zwei getrennte Listen anlegt, sondern auch wenn man diese als Feld fester Groesse speichert.
RingType und TPolynomXY sollten sich aus tParams ableiten lassen. / Zugriff auf f1_ring_ref_m und cfparams_m.
Optimierung waere nicht nur, wenn man getMonomsWithRandomCoefficients als zwei getrennte Listen anlegt, sondern auch wenn man diese als Feld fester Groesse speichert.
Optimierung waere nicht nur, wenn man getMonomsWithRandomCoefficients als zwei getrennte Listen anlegt, sondern auch wenn man diese als Feld fester Groesse speichert.
RingType und TPolynomXY sollten sich aus tParams ableiten lassen. / Zugriff auf f1_ring_ref_m und cfparams_m.
Optimierung waere nicht nur, wenn man getMonomsWithRandomCoefficients als zwei getrennte Listen anlegt, sondern auch wenn man diese als Feld fester Groesse speichert.
unterscheide zwischen PolynomGrad und hoechster moeglicher Exponent? Fuer z.B. kann ein PolynomObjekt monome mit Grad 3 enthalten / (wurde so z.B. in der Eingabe definiert), aber alle Koeffizienten der Monome mit grad 3 sind 0. Strenggenommen ist also Grad dann 2 (was aber in unserem Programm / von keinem Interesse ist) /
eigentlich ist es Quatsch, den Polynomtyp fuer das Zufallsexperiment offen zu lassen. Es sollte halt TFrommer2::TPolynomXY sein und basta. - Jetzt statt TFrommer2::TPolynomXY TFrommer1::TPolynomXY... /
pointer auf const oder Referenz uebergeben. //
halben pfusch getX().getX() beseitigen. Problem: irgedwo gibt es auch Pfusch nur mit 'getX()' - obwohl nicht notwendig.
Problem: cfparams_m->getPolynomialDegree() muss nicht unbedingt mit cfparams_m->pPoynim konsistent sein (gibt redundanz der Information und somit ein potenzielles konsistenzprpb
Polynome bekommen eine Initialisierungsfunkton mit epsPrecision als parameter, oder diese Klasse bekommt die Initialisierungsfuntion
was ist der Sinn dieses Tests?
was ist der Sinn dieses Tests?
unterscheide zwischen PolynomGrad und hoechster moeglicher Exponent? Fuer z.B. kann ein PolynomObjekt monome mit Grad 3 enthalten / (wurde so z.B. in der Eingabe definiert), aber alle Koeffizienten der Monome mit grad 3 sind 0. Strenggenommen ist also Grad dann 2 (was aber in unserem Programm / von keinem Interesse ist) /
eigentlich ist es Quatsch, den Polynomtyp fuer das Zufallsexperiment offen zu lassen. Es sollte halt TFrommer2::TPolynomXY sein und basta. - Jetzt statt TFrommer2::TPolynomXY TFrommer1::TPolynomXY... /
pointer auf const oder Referenz uebergeben. //
halben pfusch getX().getX() beseitigen. Problem: irgedwo gibt es auch Pfusch nur mit 'getX()' - obwohl nicht notwendig.
Problem: cfparams_m->getPolynomialDegree() muss nicht unbedingt mit cfparams_m->pPoynim konsistent sein (gibt redundanz der Information und somit ein potenzielles konsistenzprpb
Polynome bekommen eine Initialisierungsfunkton mit epsPrecision als parameter, oder diese Klasse bekommt die Initialisierungsfuntion
was ist der Sinn dieses Tests?
was ist der Sinn dieses Tests?
was ist der Sinn dieses Tests?
was ist der Sinn dieses Tests?
unterscheide zwischen PolynomGrad und hoechster moeglicher Exponent? Fuer z.B. kann ein PolynomObjekt monome mit Grad 3 enthalten / (wurde so z.B. in der Eingabe definiert), aber alle Koeffizienten der Monome mit grad 3 sind 0. Strenggenommen ist also Grad dann 2 (was aber in unserem Programm / von keinem Interesse ist) /
eigentlich ist es Quatsch, den Polynomtyp fuer das Zufallsexperiment offen zu lassen. Es sollte halt TFrommer2::TPolynomXY sein und basta. - Jetzt statt TFrommer2::TPolynomXY TFrommer1::TPolynomXY... /
pointer auf const oder Referenz uebergeben. //
halben pfusch getX().getX() beseitigen. Problem: irgedwo gibt es auch Pfusch nur mit 'getX()' - obwohl nicht notwendig.
Problem: cfparams_m->getPolynomialDegree() muss nicht unbedingt mit cfparams_m->pPoynim konsistent sein (gibt redundanz der Information und somit ein potenzielles konsistenzprpb
Polynome bekommen eine Initialisierungsfunkton mit epsPrecision als parameter, oder diese Klasse bekommt die Initialisierungsfuntion
was ist der Sinn dieses Tests?
was ist der Sinn dieses Tests?
endlich den Iterator ueber PQ-Elemente schreiben!
gehoert diese Funktion nicht eventuell in ReadCenterFocusParams?
endlich den Iterator ueber PQ-Elemente schreiben!
gehoert diese Funktion nicht eventuell in ReadCenterFocusParams?
verbesserung: irgendwie ueber aspekte, Dann: eine Liste verwendeter Timer und nicht verwendeter Timer führen, so dass man nicht explizit schreiben muss: Timer 3 etc.
verbesserung: irgendwie ueber aspekte, Dann: eine Liste verwendeter Timer und nicht verwendeter Timer führen, so dass man nicht explizit schreiben muss: Timer 3 etc.
verbesserung: irgendwie ueber aspekte, Dann: eine Liste verwendeter Timer und nicht verwendeter Timer führen, so dass man nicht explizit schreiben muss: Timer 3 etc.
eventuell PQpolynoms und ring_ref nicht uebergeben, da es zumindest fuer PQpolynoms lokale Variablen gibt.
eventuell PQpolynoms und ring_ref nicht uebergeben, da es zumindest fuer PQpolynoms lokale Variablen gibt.
eventuell PQpolynoms und ring_ref nicht uebergeben, da es zumindest fuer PQpolynoms lokale Variablen gibt.
sollte bei PolynomialDegree=2 nicht durchgeführt werden
sollte bei PolynomialDegree=2 nicht durchgeführt werden
sollte bei PolynomialDegree=2 nicht durchgeführt werden
performRandomExperiment Name ändern - das ist nicht nur Random sondern auch all All! /
Objekt einführen, welches die Daten für einen Versuch enthält, und nicht alls quer durch die Bank in ReadStrudelParams ablegen. /
In der Ausgabedatei fehlt noch die Information, welcher Zufallsgenerator verwendet wurde - /
TODO ohne at am Anfang heraussuchen und bearbeiten /
Parameter dokumentieren! /
wenn bei der Ausgabe Hamilton-Komponenten herausgefiltert werden, soll dies bei der Ausgabe explizit angezeigt werden. /
fuer isHamiltonComponent reicht auch frommer 1 und Koeffizienten in diesem Typ. vielleicht / kann man dies loesen, indem man eine Zwischenstufe schaltet, welche die Polynome nach bedarf umrechnet, / also fuer compute_p_coeff. fuer createJacobiMatrix muss nicht umgerechnet werden, da die Umrechnung schon intern stattfindet! Welche Polynome sollen denn nun fuer das Zufallsexperiment verwendet werden (jetzt, bzw, spaeter?) Per Definition muss nur fuer die Jacobi-Matrix und fuer compute_p_coeff epsprecision 1 verwendet werden. hoeheres epsPrecision
problem: wenn formel beutzt wird, und alle Zufallskoeffizienten berechnet werden, (die Zufallskoeffizienten sind die berechneten Koeffizienten), kommt immer das gleiche Ergebnis raus
experimentCounter wird nirgendwo ausgegeben, wofuer war er vorgesehen?
performRandomExperiment Name ändern - das ist nicht nur Random sondern auch all All! /
Objekt einführen, welches die Daten für einen Versuch enthält, und nicht alls quer durch die Bank in ReadStrudelParams ablegen. /
In der Ausgabedatei fehlt noch die Information, welcher Zufallsgenerator verwendet wurde - /
TODO ohne at am Anfang heraussuchen und bearbeiten /
Parameter dokumentieren! /
wenn bei der Ausgabe Hamilton-Komponenten herausgefiltert werden, soll dies bei der Ausgabe explizit angezeigt werden. /
fuer isHamiltonComponent reicht auch frommer 1 und Koeffizienten in diesem Typ. vielleicht / kann man dies loesen, indem man eine Zwischenstufe schaltet, welche die Polynome nach bedarf umrechnet, / also fuer compute_p_coeff. fuer createJacobiMatrix muss nicht umgerechnet werden, da die Umrechnung schon intern stattfindet! Welche Polynome sollen denn nun fuer das Zufallsexperiment verwendet werden (jetzt, bzw, spaeter?) Per Definition muss nur fuer die Jacobi-Matrix und fuer compute_p_coeff epsprecision 1 verwendet werden. hoeheres epsPrecision
problem: wenn formel beutzt wird, und alle Zufallskoeffizienten berechnet werden, (die Zufallskoeffizienten sind die berechneten Koeffizienten), kommt immer das gleiche Ergebnis raus
experimentCounter wird nirgendwo ausgegeben, wofuer war er vorgesehen?
Formula23Timer-Objekt anlegen und dort diese Funktion reinpacken.
Formula23Timer-Objekt anlegen und dort diese Funktion reinpacken.
einheitlich die Reihenfolge der Parameter regeln...
einheitlich die Reihenfolge der Parameter regeln...
einheitlich die Reihenfolge der Parameter regeln...
t_Frommer kennt den RingTyp, der Ring kennt den Elenemttyp.
jacobi_matrix->printValue ist keine saubere Loesung...
der Klassenname TMatrix ist ungluecklich... da T auch fuer TemplateTyp steht.
was soll passieren, wenn subJacobiMatrix gleich fullJacobiMatrix? DONE
Matrix soll Vergleichsoperator implementieren.
Zeiger ider Referenzen speichern?
mit cfParams (pureSmoothnesTest():ja/nein als traits) parametrisieren und damit zwischen 'print' und 'singleResultprintSmoothnessTestResult' wählen
Redesign CoeffList?
why not use a std::list ? (j.k.)
eventuell abhaengig von minlift (und Rang(jacobian)) eine Verteilungsstatistik für failedLiftNr führen.
liftstatistik optional in DB speichern.
Test implementieren, welcher nachweist das perform_first_C_Step und perform_c_step in der ersten Stufe und perform_fast_C_Step immer äquivalent sind für epsPrecision=0
Test implementieren, welcher nachweist das perform_first_C_Step und perform_c_step in der ersten Stufe und perform_fast_C_Step immer äquivalent sind für epsPrecision=0
optimierung perform_C_Step mit degree parametrisieren - spart switch case! - bringt nur 5 Prozent
optimierung Verbesserungsidee: Die Multiplikation durchführen, aber die Addition nur mitm Integar ud Konvertierung nur einmalig zum Schluss! beim nxnxn bringt das eine Verbesserung !!! desweiteren könnte man bei eps=0 die Multiplikation auf der CPU über die Addition der Exponenten bilden !
Optimierung: man könnte sich die Inversion von p_a_table_loc[] sparen, wenn man dafür eine Tabelle anlegt. andererseits muss man dann einen Zeiger mehr mit sich rumschleppen und das könnte wieder Performance kosten.
Optimierung: eventuell wäre es doch schlauer, als Körperoperation sub und div zuzulassen und hier auch zu verwenden, da je nach Implementation add (a,addinv(b)) evtl langsamer als sub (a,b) ist.
eventuell die Pointer auf die Polynome p und Q immer zu Beginn uebergeben -so hat man zum einen nicht mehr das PRoblem mit setPolynoms, und zum anderen kann so der Grad der Polynome nicht plötztlich verändert werden!
Mehrere frommer-Varianten implementieren. - teilweise Umgesetzt
die asserts in perform_C_Step in TESTS umwandeln.
sollte ein Polynom mit dem Ring templatisiert sein , und der Ring enthält dann den Elementtyp ? Normalerweise ja.. noch ausstehend.
: wenn LiftTest schiefgeht, dann besonders viele Lifts durchführen, um das Minimum und evtl eine zweite Stufe festzustellen.
: Idee: zu in der DB gespeicherten Punkten mit schiefgegangenen Lifts eine ausführliche LiftStatistik erstellen - LiftExperiment
Datenstruktur polynompaar auch hier verwenden?
Datenstruktur polynompaar auch hier verwenden?
Datenstruktur polynompaar auch hier verwenden?
throw error in catch-case!
throw error in catch-case!
throw error in catch-case!
: doitx könnte die Funktion doit vollkommen ersetzen - man muss nur angeben, wieviel Strudelgrößen man denn nun berechnen will. die Frage ist, ob der doitx -Aufruf genau so schnell ist, wie doit().
soll man nicht bei MaxFocalValuesToCompute aufhören
soll man nicht bei MaxFocalValuesToCompute aufhören
soll man nicht bei MaxFocalValuesToCompute aufhören
soll man nicht bei MaxFocalValuesToCompute aufhören
getchar ersetzen durch globalPause, und dann in globalPause getChar aktivieren oder deaktivieren.
getchar ersetzen durch globalPause, und dann in globalPause getChar aktivieren oder deaktivieren.
getchar ersetzen durch globalPause, und dann in globalPause getChar aktivieren oder deaktivieren.
Test fuer die Allgemeine Implementierung fehlte - Fehler wurde nur gefunden, weil case2 rausgenommen wurde.
Test fuer die Allgemeine Implementierung fehlte - Fehler wurde nur gefunden, weil case2 rausgenommen wurde.
moegliche Optimierung: statt inverse nachzuschlagen und mit (n-j+2) zu multiplizieren könnte man eine extra tabelle fuer skalar mal inverse anlegen. Das gleiche gilt fuer Subtraktion.
moegliche Optimierung: statt inverse nachzuschlagen und mit (n-j+2) zu multiplizieren könnte man eine extra tabelle fuer skalar mal inverse anlegen. Das gleiche gilt fuer Subtraktion.
moegliche Optimierung: statt inverse nachzuschlagen und mit (n-j+2) zu multiplizieren könnte man eine extra tabelle fuer skalar mal inverse anlegen. Das gleiche gilt fuer Subtraktion.
s10 symbolisch berechnen
membervariable "Name" vergeben!
nicht nur die Zeit messen, sondern auch die Anzahl der Aufrufe zählen
s10 symbolisch berechnen
membervariable "Name" vergeben!
nicht nur die Zeit messen, sondern auch die Anzahl der Aufrufe zählen
eventuell setPolynoms() streichen und die Polynome als 'doit'-Parameter aufnehmen.
das Problem ( minusp->getDegree() != qq->getDegree() ); loesen
eventuell setPolynoms() streichen und die Polynome als 'doit'-Parameter aufnehmen.
das Problem ( minusp->getDegree() != qq->getDegree() ); loesen
eventuell setPolynoms() streichen und die Polynome als 'doit'-Parameter aufnehmen.
das Problem ( minusp->getDegree() != qq->getDegree() ); loesen
add Files to groupdefs
Sicherheitschecks durchführen um falsche Verwendung zu verhindern! was kann man den hier falsch verwenden?
OPTIONAL: IFrommer-Interface definieren (keine Vererbung! ). Du weisst ja, wo du die Technik findest.
Testfunktionen schreiben! Fuer den Testdurchlauf sollte ein Ring und einer Frommer-Objekt definiert werden, welche SAFE-Routinen aufrufen?
Problem: wenn man Fliesskommazahlen als Parameter an FFPACK übergibt, wird dies von FFPACK nicht überprüft.
: wenn man diese tolle Initialisierung verwendet, sollte die Initialisierung aus Strings auch getestet werden !
: ein optionaler Test wäre ...was?
: Integrationstest: solveLGS mit getRightKernel kombiniert...
ist ein Fehler ohne Tests entdeckt -> ein Test überlegen, welcher den Fehler feststellen würde!
nur einmaligen Aufruf erlauben
problem: wenn keine Formel verwendet wird, ist die Statistik ebenfalls falsch.
Idee: Klasse parametrisieren, ob diese Array-Grenzen überprüfen soll oder nicht.
wenn eine der Formeln in Kombination mit einem Filter verwendet wird, ist die Statistik für die ersten entsprechenden Strudelgrößen nicht mehr korrekt.
wie kann getestet werden, ob die Eingaben auch aus einer Datei und dem input Stream korrekt gelesen werden?
damit man bei den Zahlen sicher ist, muessen diese wieder zurueck in ein String verwandelt werden und dann verglichtn, zumindest bei anzZufall!
: es sollte waehrend des Compilevorgangs oder zumindest einmal während des Programmstarts geprueft werden, ob der interne Datentyp groß genug ausgelegt ist.
Sicherheitspruefung: maximal zulaessiger Template-Parameter CHAR <=sizeof(datatype)*8!
warnen, wenn als DataType ein unsigned ding verwendet wird
einmalig warnen wenn (bitsize>=sizeof(TScalar)*8) - dann kann nicht im Speicher subtrahiert werden
einmalig warnen wenn (bitsize>=(sizeof(TScalar)-1)*8) - dann kann nicht im Speicher addiert werden (es kommt zum Überlauf)
size_t or NOT size_t as return type for index funtions?
in den Indexfunktionen eventuell bitsize durch needbits<CHAR>::value ersetzen, weil schneller!
: bereits waehrend des Compilevorgangs prüfen, ob die Datenstrukturen gross genug ausgelegt sind - , es reicht aber auch, vor der ersten Verwendung die Tests Durchzuführen.
Grenzen fuer enums ueberpruefen
Grenzen fuer enums ueberpruefen
Grenzen fuer enums ueberpruefen
security check: Template-Parameter CHAR <=sizeof(TScalar) and (CHAR*CHAR)<=sizeof(TScalarPair) !
statt (int getPairIndex) (size_t getPairIndex)?
herausfinden, warum und um wieviel uebergabe per referenz in manchen Fällen schneller ist. basierend auf diesem Wissen könnte man sich die Funktionen getxxxByRef eventzell ersparen!
Problem: Klammer kann noch nicht eingelesen werden. sollte auch nicht ausgegeben werden. Nachteil: Ohne Klammerverwendung ist die Lesbarkeit nicht gut.
Herausfinden, wo es ein Problem bei der Ausgabe geben kann, wenn nicht geklammert wird.
partially done: rewrite Parameter class and Parameter parser (Kroeker), especially loadParam function, perform at least error checking
we have here a parameter List, todo: create a class with parameterOptions? - was hattest du damit gemeint?
deleteParameter einfuegen
Problem: objekt may be unintentionally changed by parsing a string with the rule getConstRuleRef().
: Ueberpruefung auf DEGREE kleiner 128, wegen "static const short pshift" - wieso, DAS ist kein Problem, aber eine wellDefined-Funktion sollte programmiert werden.
Korrektheit: Polynomdefs alle falsch, nur durch die Tatsache, dass nextpow2num(3)=4 ist (hoffentlich), passen die Größen doch und es gibt keine Speicherschutzverletzung
Vorsicht beim Schiften! muss ich beim Shift die Variablen vorher in ein int konvertieren ja/nein?
is dangerous, because enum value is limited!
print svn source URL /
ueberall pruefen, ob ein 'new' geklappt hat
bessere Idee: Die Information in einer Datei ablegen und diese dann am Ende der Ausgabe anhaengen. Problem: Dateipfad feststellen.
noch bessere Idee: auf die erstellte Dokumentation verweisen.
replace internal int topy by int32 oder int64
Probleme: readNextPolynoms: polynome sind von TNum abhängig - welche TNum und welche Polynome sollen hier benutzt werden?
überlegen, wie man ein möglichst optionales Programm basteln kann. an eine Experimentalrunde - nur ein PQ-Paar muss p,q von aussen übergeben werden können, mit Optionen, epsprecision und allem piepapo. Dann wirds gehen, sonst nicht. Notfalls parametrisiert man auch die centerFocus-Fkt, um allgemeine Implementierung und optimierte Implementierung zu ermöglichen schliesslich ist der Ring zumindest für das Einlesen fest, warum mehr Freiheiten einführen als notwendig?
überlegen, ob in dieser Klasse überhaupt parametrisiert werden soll
: maybe using an free parser generator is an optimal and higly portable solution instead of writing unreadable, complex, errneous and unflexible hardcoded parser
: maybe using an free parser generator is an optimal and higly portable solution instead of writing unreadable, complex, errneous and unflexible hardcoded parser
was passiert mit einem int nach einer Multiplikation ? / wird dieser bei Bedarf in ein 'long' umgewandelt, oder gibt es ein Überlauf? ->nehme an, es gibt einen Ueberlauf / Ist bei aktuell auftretenden Matrixgroessen aber nicht kritisch.
Matrixgroesse parametrisieren? short int fuer Zeilen und Spalten reicht ?
printValue besser lösen; teilweise erledigt
eine Zeitmessung protokollieren.
statt outputMatrixInMacaulayStyle outputInMacaulayStyle
implement StreamIn-Operator for TNum !;
nur istream verwenden, und statt <iostream> nur <iosfwd> im header einbinden
auftretende Fehler werden nicht
add static ring pointer to TNum class?
operator[] implementieren?
'+-' sollte nicht erlaubt sein,
beim Einlesen der Differentialform kann diese theoretisch = 0 sein - dann geht das Einlesen wohl schief.