2016-09-08 4 views
2

Dies ist Teil meiner Implementierung von kmean Algorithmus. Ich habe zwei Speicherblocks sowohl in gleicher Größe, so daß *cluster_center der aktuelle Mittelpunkt des Clusters ist und *new_centroids repräsentiert den neuen Schwerpunkt nach dem Mittelwert der Punkte des Clusters unter:Vergleich der Gleichheit der Werte zwischen zwei Speicherblöcken

double *cluster_center = malloc((k * dim) * sizeof(double)); 
double *new_centroids = malloc((k * dim) * sizeof(double)); 

Ich habe folgende Schleife um die Ergebnisse zu kopieren vom new_centroids zum cluster_center ohne Probleme:

for (int i = 0; i < k; ++i) { 
    memcpy(&cluster_center[i * dim], &new_centroids[i * dim], dim * sizeof(double)); 
} 

In der Tat, ich mag wissen, ob C über eine integrierten IT-Funktion vergleichen die Werte beiden Blöcke hat, da ich einmal meinen Algorithmus beenden will, dass die Werte von *new_centroids und *cluster_center sind die gleichen (d. H. Änderten sich nicht). Ich weiß wirklich nicht, wie ich das machen soll.

Danke

+0

Suchen Sie 'memcmp()' für einen binären Vergleich. Kann für den Vergleich von 'double'' + 0.0', '-0.0' und' NaN' nicht ausreichend sein – chux

+0

Sie meinen wie ['memcmp'] (http://en.cppreference.com/w/c/string/byte/memcmp)? –

+0

Ich meine die ** Werte ** beider Arrays zu vergleichen, wenn sie ähnlich sind. Ich denke "Memcmp" vergleicht nur die Länge nicht die tatsächlichen Werte Ähnlichkeiten !! – Kris

Antwort

0

Die Funktion, die Sie suchen ist memcmp (Speicher vergleichen). Unmittelbar nachdem Sie eine Anweisung ausführen:

memcpy(destination, source, size); 

dann

memcmp(destination, source, size); 

sollte Null zurück.

Verwandte Themen