Это часть моей реализации алгоритма 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
те же (то есть, не менялись). Я действительно не знаю, как это сделать.
Спасибо
Исследование 'memcmp()' для двоичного сравнения. Может быть недостаточно для сравнения «double» '+ 0.0',' -0.0' и 'NaN' нужна специальная обработка. – chux
Вы имеете в виду ['memcmp'] (http://en.cppreference.com/w/c/string/byte/memcmp)? –
Я имею в виду сравнение ** значений ** обоих массивов, если они похожи. Я думаю, что 'memcmp' сравнивает только длину, а не фактические значения сходства !! – Kris