0

バイナリファイルを作成しています。ファイルの内容は double 値です。バイナリ リーダーを使用して double 値を抽出すると、小数点以下の値が一致しません

例: ファイルに書き込まれた値。-0.0139519833028316

ファイルから抽出された値。-0.0139519833028317

この種の矛盾を回避するにはどうすればよいでしょうか。

aStreamWriter.WriteLine(double values);

//to read the data ,
BinaryReader aBinaryReader = new BinaryReader();
int points_length = CurveCount * VectorLength * 2 * VoxelIndex.Length * 2;
double[] points = new double[points_length];
for (int i = 0; i < points_length; i++)
    points[i] = aBinaryReader.ReadDouble();
for(int i =0; i < points_length; i++) {
    // then write the points values to a file
}
4

3 に答える 3

0

それは本当に矛盾でしょうか?double は、概念的には実数への近似です。元の測定値の誤差を考えると、その数字は重要ですか? この文脈では、それらは本当に「同じ」数ではありませんか?

于 2012-11-26T12:54:19.247 に答える
0

編集:

あなたのコメントで、問題は明らかになります。テキストライターStreamWriterです。への呼び出しはtextを書いています。率直に言って、あなたは幸運でしaStreamWriter.WriteLine(double)


オリジナル

正常に動作します:

    double d = -0.0139519833028316;
    byte[] raw;
    using (var ms = new MemoryStream())
    {
        using (var writer = new BinaryWriter(ms))
        {
            writer.Write(d);
        }
        raw = ms.ToArray();
    }
    double newVal;
    using(var ms = new MemoryStream(raw))
    using (var reader = new BinaryReader(ms))
    {
        newVal = reader.ReadDouble();
    }
    Console.WriteLine(newVal == d); // True

double読み取り/書き込みコードとはまったく関係のない丸めの奇妙な点を見ているだけだと思います。

于 2012-11-26T12:55:20.603 に答える