私は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の係数として(例えば、ここではhttps://github.com/ahay/src/blob/master/user/cram/esc_slow2.cのようにeinsplineライブラリを使用して実装されています)。私がPythonとCのスプラインを評価するとき、私は異なる値を取得します。
例に集計コードはありません。 –
フェアポイント - 今すぐ追加 – JMzance
@JMzance開始する前に 'sum'を0に設定する方法を示してください。 – unwind