2016-09-08 2 views
2

Это часть моей реализации алгоритма kmean. У меня есть два блока памяти, как в равном размере так, что *cluster_center является текущим центром кластера и *new_centroids представляет новый центр тяжести после приема среднего точек кластера:Сравните равенство значений между двумя блоками памяти

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

У меня есть следующий цикл, чтобы скопировать результаты от new_centroids к cluster_center без каких-либо проблем:

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

на самом деле, я хочу знать, если C имеет встроенную функцию его для сравнения значения от обоих блоков, так как я хочу завершить свой алгоритм, как только значения из *new_centroids и *cluster_center те же (то есть, не менялись). Я действительно не знаю, как это сделать.

Спасибо

+0

Исследование 'memcmp()' для двоичного сравнения. Может быть недостаточно для сравнения «double» '+ 0.0',' -0.0' и 'NaN' нужна специальная обработка. – chux

+0

Вы имеете в виду ['memcmp'] (http://en.cppreference.com/w/c/string/byte/memcmp)? –

+0

Я имею в виду сравнение ** значений ** обоих массивов, если они похожи. Я думаю, что 'memcmp' сравнивает только длину, а не фактические значения сходства !! – Kris

ответ

0

Функция вы ищете является memcmp (память сравнить). Сразу после выполнения заявление:

memcpy(destination, source, size); 

затем

memcmp(destination, source, size); 

должен возвращать ноль.