您好,我对 c++ 中的 ceil 函数有一些困难:
我有一个规则的点网格,我需要对其执行插值以计算一组点的 z 值。
为了做到这一点,对于每个计算点,我需要获取网格上最近的点。我这样做:
y1 = dy*floor(p.y/dy);
y2 = dy*ceil(p.y/dy);
其中 dy 是网格两点之间的空间。(y1,py 和 dy 是双精度的)如果我使用显示结果
cout << static_cast<double>(p.y/dy) << ": " << y1 << ", " << y2 << endl;
我得到了这些奇怪的结果:
0: 0, 0
1: 0.1, 0.1
2: 0.2, 0.2
3: 0.3, 0.4
前三个结果都可以,但最后一个结果是错误的,因此断言失败。
我想知道这个奇怪的错误是从哪里来的以及如何避免它。谢谢。
我为我的英语道歉
编辑
我用 dy = 0.1 调用该函数,但在执行期间,它采用以下值 dy = 0.10000000000000001。py 是这样初始化的:
const uint N = round((x2 - x1) / dx2);
const uint M = round((y2 - y1) / dy2);
double p = persistence;
double n = number_of_octaves;
// generation of the points where the perlin noise is generated
std::vector<Vertex3d> ret;
std::vector<Vertex3d> dummy;
for (uint i=0;i<=N;++i)
{
for (uint j=0;j<=M;++j)
{
ret.push_back({.x = i*dx2, .y=j*dy2, .z=0});
dummy.push_back({.x = i*dx2, .y=j*dy2, .z=0});
}
}
其中 x1 = 0 和 x2 = 1(根据 gdb)