C++ 不从应该存在的文件中读取数据C++;

C++ 不从应该存在的文件中读取数据C++;,c++,file,C++,File,因此,为了处理比我的计算机总RAM内存还大的3D布尔数组,我尝试将它们转换成文件形式 文件的名称是x坐标 在文件中写入y坐标、z坐标和0或1以指示布尔值 (我没有把它全部放进一个文件,因为它花了太长的时间才被读取) 下面是生成这些文件的代码 char fileName[100]; for(double px = minX; px <= maxX; px = px + deltaX) { sprintf(fileName,"%lf.txt",px);

因此,为了处理比我的计算机总RAM内存还大的3D布尔数组,我尝试将它们转换成文件形式 文件的名称是x坐标 在文件中写入y坐标、z坐标和0或1以指示布尔值 (我没有把它全部放进一个文件,因为它花了太长的时间才被读取) 下面是生成这些文件的代码

char fileName[100];
    for(double px = minX; px <= maxX; px = px + deltaX)
    {
        sprintf(fileName,"%lf.txt",px);
        allPoints = fopen(fileName,"w");
        for(double py = minY; py <= maxY; py = py + deltaY)
        {
            for(double pz = minZ; pz <= maxZ; pz = pz + deltaZ)
            {
                if(test(x,y,z))
                {
                    fprintf(allPoints,"%lf\t%lf\t1\n",py,pz);
                }
                else
                {
                    fprintf(allPoints,"%lf\t%lf\t0\n",py,pz);
                }
            }
        }
        fclose(allPoints);
    }
char文件名[100];

对于(double px=minX;px来说,问题可能是这一行:
if(iy==ky&&iz==kz)

这里您比较的是浮点数,它是计算机中具有一定位数的二进制数。它们不能精确地表示相同的实数,而可以精确地表示十进制数(反之亦然)。此外,当你对浮点数进行任何计算时,都会有舍入误差。因此,你通常不想比较它们是否完全相等,你只想看看它们是否足够接近,可以认为是相同的值

因此,如果像这样执行上述

#include <cmath>

const double EPSILON = 0.0000001; // choose appropriate value for your application
#包括
const double EPSILON=0.0000001;//为应用程序选择适当的值

if(std::fabs(iy-ky)


请注意,上面的内容并不完美,有时甚至非常糟糕。选择好的ε可能很难,甚至在某些应用程序中是不可能的。因此,在一些阅读资料中,您会发现一些关于如何进行比较的讨论,并链接到一个更加数学化的资源:

做得很好
iy
iz
ever equal
ky
ans
 kz
?听起来您可能需要学习如何使用调试器来逐步调试代码。有了一个好的调试器,您可以逐行执行程序,并查看它与预期的偏差。如果您要进行任何编程,这是一个必不可少的工具。进一步阅读:问题可能是比较浮点数不要比较它们是否相等,测试它们是否足够接近。好吧,判断文件是如何创建的,似乎别无选择,只有iy和iz等于ky和kz,因为每个文件都包含iy和iz的所有可能值。谢谢海德,我相信这是个诀窍!现在…我如何结束这个问题?要结束这个问题,有人需要发布一个答案,然后你就可以接受答案。如果@hyde仍然活跃,我认为他为此获得代表是公平的。
#include <cmath>

const double EPSILON = 0.0000001; // choose appropriate value for your application
if(std::fabs(iy - ky) < EPSILON && std::fabs(iz - kz) < EPSILON)