C 比较两个内存块之间的值是否相等
这是我实现C 比较两个内存块之间的值是否相等,c,C,这是我实现kmean算法的一部分。我有两个大小相同的内存块,*cluster\u center是群集的当前中心,*new\u centroids表示取群集点平均值后的新质心: double *cluster_center = malloc((k * dim) * sizeof(double)); double *new_centroids = malloc((k * dim) * sizeof(double)); 我使用以下循环将结果从新的\u质心复制到群集\u中心,没有问题: for (i
kmean
算法的一部分。我有两个大小相同的内存块,*cluster\u center
是群集的当前中心,*new\u centroids
表示取群集点平均值后的新质心:
double *cluster_center = malloc((k * dim) * sizeof(double));
double *new_centroids = malloc((k * dim) * sizeof(double));
我使用以下循环将结果从新的\u质心
复制到群集\u中心
,没有问题:
for (int i = 0; i < k; ++i) {
memcpy(&cluster_center[i * dim], &new_centroids[i * dim], dim * sizeof(double));
}
for(int i=0;i
事实上,我想知道C是否有一个内置函数来比较两个块的值,因为我想在*新质心
和*簇中心
的值相同时终止算法。我真的不知道怎么做
谢谢您正在寻找的函数是
memcmp
(内存比较)。执行语句后,立即执行以下操作:
memcpy(destination, source, size);
然后
应返回零。对于二进制比较,请研究
memcmp()。可能不足以比较double
+0.0
,-0.0
和NaN
需要特殊处理。您的意思是喜欢吗?我的意思是比较两个数组的值,如果它们相似的话。我认为memcmp
只比较长度,而不是实际值的相似性!!类似地,如果数组以相同的方式映射,则可以在不使用任何循环的情况下一次性地memcpy
整个数组。(无需使用memmove
,因为内存范围不能重叠。)memcmp
只比较长度?不,您告诉memcmp
大小是多少,它会比较每个字节的值。
memcmp(destination, source, size);