проблема с вызовом функции в с ++ - PullRequest
1 голос
/ 26 января 2011

У меня проблема с моей программой, я фактически работаю над интерполяцией с Cubic 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;
}

1 Ответ

3 голосов
/ 26 января 2011

Ваше описание является явно неинформативным (и, кажется, вы скорее ответите абразивными комментариями, чем предоставите больше информации), поэтому я могу дать вам общий ответ.Куча вещей может отличаться между этими двумя случаями.Во-первых, предположительно, эти две функции определены в разных файлах, поэтому в зависимости от того, что включено, разные типы могут иметь совершенно разные определения.Из того, что я вижу, у тебя нет проблем с областью видимости, но, возможно, я ошибаюсь.А также, поскольку вы не предоставляете нам код для этих других функций, которые знают, какие у них побочные эффекты.

Однако, если честно, я думаю, что ваша проблема, скорее всего, связана с оптимизацией, которую выполняет компилятор, когда функцияуказывается(Попробуйте компилировать без оптимизации).

Наконец, самая поразительно плохая вещь в том, что у вас есть цикл, который использует double в качестве итератора ... вы издеваетесь?Кто знает, сколько раз выполнялся этот цикл.Он полностью зависит от округления с плавающей точкой компилятора, что означает, что он не только непредсказуем, но даже если вам повезет, и он работает на вашей машине, кто знает, сработает ли он на других.

...