c++ - 为什么我的程序在读取/写入文件时丢掉最重要的数字?

标签 c++ file-io

我正在编写两个函数来将4维 vector 保存到文件中,然后将 vector 读回到文件中。

void saveLayer(string filename, int layer){
    ofstream ofile(filename, ios::out | ios::trunc);
    vector<vector<vector<vector<double>>>> oweights(layers[layer]->weights);
    for(vector<vector<vector<double>>> stratg:oweights){
        for(vector<vector<double>>layeri:stratg){
            for(vector<double> neuronq:layeri){
                for(double q:neuronq){
                    ofile<<setprecision(15)<<q;
                }
            }
        }
    }
    vector<vector<vector<double>>> obiases=layers[layer]->biases;
    for(vector<vector<double>>z:obiases){
        for(vector<double> w:z){
            for(double q:w){
                ofile<<setprecision(15)<<q;
            }
        }
    }
    ofile.close();
}

void loadLayer(string filename, int nS, vector<int> layerStruct){
    vector<vector<vector<vector<double>>>> newWeights;
    vector<vector<vector<double>>> newBiases;
    ifstream ifile(filename, ios::in);
    for(int i=0; i<nS; i++){
        vector<vector<vector<double>>> netWeights;
        for(int z=1; z<layerStruct.size(); z++){
            vector<vector<double>> layerWeights;
            for(int x=0; x<layerStruct[z]; x++){
                vector<double> neuronWeights;
                for(int y=0; y<layerStruct[z-1]; y++){
                    double w;
                    ifile>>w;
                    neuronWeights.push_back(w);
                }
                layerWeights.push_back(neuronWeights);
            }
            netWeights.push_back(layerWeights);
        }
        newWeights.push_back(netWeights);
    }
    for(int i=0; i<nS; i++){
        vector<vector<double>> netBiases;
        for(int z=1; z<layerStruct.size(); z++){
            vector<double> layerBiases;
            for(int x=0; x<layerStruct[z]; x++){
                double neuronBias;
                ifile>>neuronBias;
                layerBiases.push_back(neuronBias);
            }
            netBiases.push_back(layerBiases);
        }
        newBiases.push_back(netBiases);
    }
    layers[0]->numStrats=nS;
    layers[0]->weights=newWeights;
    layers[0]->biases=newBiases;
    ifile.close();
}

我的问题是,当应该写入或读取例如1.2345时,它将读取或写入0.2345,从而删除了最高有效数字。我不知道问题是否出在保存或加载功能上。我会很感激对此的任何解释。

最佳答案

写入输出文件的数据之间没有定界符。给定1.234和5.678

ofile<<setprecision(15)<<q;

将1.2345.678写入输出文件。您的所有数字都被拼凑成一个大块。回读时
ifile>>w;

不知道一个数字应该在哪里结束而另一个数字应该在哪里开始。结果,它会读取直到找到一个不可能成为double一部分的字符。

例如。在找到第二个'.'之前,将读取1.2345.678直到1.2345。浮点数不能有两位小数(即使这是double),因此解析器将停止,将.678保留在流中以进行下一次读取,并返回1.2345。下次读取.678左右并返回0.678。

现在,最重要的数字已经神秘地消失了,由于double最多只能显示15位数字,因此您可能不会注意到它被保留在前一个数字的16位数字上。

可能的解决方案:在每个数字后写一个空格。
ofile<<setprecision(15)<<q << ' ';

关于c++ - 为什么我的程序在读取/写入文件时丢掉最重要的数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59690004/

相关文章:

c++ - 派生类类型与基类的兼容性会导致内存泄漏吗?

c# - 使用HttpClient分块上传大文件到Controller,IFormFile总是为空

python - json.dump 不写入文件

c++ - ReadFile 只读取一个缓冲区字符?

c++ - 确定类型是否为 C++ 中相同的基础类型的别名

c++ - BGR 到 YCrCb 导致 OpenCV 中的灰色图像

c++ - 使非 const 对象成员函数在 openMP 中可用

c++ - 如何使用 operator new 创建动态二维字符数组?

c - fclose 上的段错误?

c++ - Createfile2、ReadFile 和 WriteFile;为什么 ReadFile 不读取我在 WriteFile 中写的内容?