In meinem Programm lege ich bestimmte Koordinaten in eine Liste. Der Algorithmus fügt jedoch manchmal zweimal die gleichen Koordinaten in die Liste ein. Um das zu vermeiden, muss ich den Standardansatz durch den EPSILON Wert auf die absolute Differenz der beiden x- und y-Werte aus allen Positionen in der Liste Vergleich:Kleinste EPSILON zum Vergleich von Doppelvariablen in C?
bool doubleEqual(double x1, double y1, double x2, double y2){
if((fabs(x1-x2) < EPSILON) && (fabs(y1-y2) < EPSILON)){
return TRUE; // particle is already in list
}
return FALSE; // particle is not in the list
}
Ich habe mehrere Fragen:
1) Ist diese Implementierung zum Vergleich der Position von zwei Partikeln sogar korrekt?
2) Wie klein kann ich EPSILON wählen? (Die Partikel können sehr nahe beieinander liegen)
3) Gibt es eine schnellere/robustere Implementierung, um die Position von Partikeln zu vergleichen?
Wenn Sie etwas in einer Liste basierend auf der genauen Position platzieren, verwenden Sie ein Integer-Konzept.Das ist im Grunde, was Sie mit den Epsilonen machen - schneiden Sie extra Präzision weg, um den doppelten Vergleich in einen ganzzahligen Vergleich zu verwandeln. Wenn Sie eine Überlappung sehen möchten, nehme ich an, dass sie eine begrenzende Geometrie haben. Überprüfen Sie, ob es eine Kollision gibt. –
'x1' und' x2' können '1e + 300' oder' 1e-300' sein. Was ist ihr Unterschied? –
'fabs (x1-x2)
chux