我有一个包含32位浮点数N的大文件。此文件是使用numpys MEMMAP功能如下创建:C mmap和numpy memmap之间的差异
mmoutput = np.memmap("filename", dtype='f4', mode='w+', offset=0, shape=N)
mmoutput[:] = my_floats
mmoutput.flush()
当我使用numpy的加载这些系数回来,并使用它们求和:
mminput = np.memmap("filename", dtype="f4", mode='c', offset=0, shape=N)
mminput.sum()
我得到的值82435.047(这是正确的)。
然而,当我用C的MMAP如下的彩车阅读:
int fd = open("filename", O_RDONLY, 0);
float * coefs = (float*) mmap(NULL, sizeof(float) * N, PROT_READ, MAP_SHARED, fd, 0);
double sum = 0.0;
for (int i = 0; i < N; i++) sum += coefs[i];
的数字之和为不同的值:82435.100。
有人可以帮我发现我的错误吗?或许numpy写它的浮动和C读取它们的方式有区别吗?
全面披露
我其实是只计算这些数字的总和作为检查它们是相同的。它们的实际用途是作为bspline中的系数(使用如图所示的einspline库实现,例如,在这里为https://github.com/ahay/src/blob/master/user/cram/esc_slow2.c)。当我评估python和C中的样条曲线时,我会得到不同的值。
您的示例中没有求和代码。 –
公平点 - 现在加入 – JMzance
@JMzance同时显示如何在开始之前将'sum'设置为0。 – unwind