gpt4 book ai didi

c++ - c++中函数调用的问题

转载 作者:行者123 更新时间:2023-11-30 03:08:38 25 4
gpt4 key购买 nike

我的程序有问题,我实际上是在使用三次 BSplines 进行插值,但是当我在 main() 中调用我的插值函数时,我得到了错误的结果,而当我直接在 main() 中编写函数时,它起作用了:(。我看不出两者之间有什么区别。

void CubicBSpline::interpolation(){
Point3d point;
for(unsigned int i = 3; i < (knots->m_points).size(); i++){
for(double t=0; t<1; t+=0.1){
point = bSplineCubicUniform(i, t);
cout << point.x << " " << point.y <<endl;
}
}
}

int main(){
CubicBSpline cbs(4, 4);
cbs.interpolation(); //this is the call of my function but I got a wrong result

// and here I write directly my function and that's work good
Point3d point;
for(unsigned int i = 3; i < (cbs.knots->m_points).size(); i++){
for(double t=0; t<1; t+=0.1){
point = cbs.bSplineCubicUniform(i, t);
cout << point.x << " " << point.y <<endl;
}
}
return 0;
}

最佳答案

您的描述显然没有提供任何信息(而且您似乎宁愿用刻薄的评论来回应,也不愿提供更多信息)所以我只能给您一个笼统的答案。这两种情况之间可能有很多不同。首先,这两个函数可能是在不同的文件中定义的,因此根据包含的内容不同,不同的类型可能具有完全不同的定义。据我所知,您没有任何范围界定问题,但也许我错了。而且由于您没有向我们提供这些其他功能的代码,我们知道它们有什么副作用。

但老实说,我认为您的问题很可能是由于编译器在内联函数时进行的优化。 (尝试在没有优化的情况下进行编译)。

最后,这里最明显的坏事是你有一个循环使用 double 作为它的迭代器……你在开玩笑吗?谁知道循环执行了多少次。它完全依赖于编译器的浮点舍入,这意味着它不仅不可预测,而且即使你很幸运并且它可以在你的机器上运行,谁知道它是否可以在其他机器上运行。

关于c++ - c++中函数调用的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4803325/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com