函数

2016-04-24 3 views
0

ための奇妙な挙動ので、基本的に、私はノルムを計算するためにオーバーロード機能を有する:函数

double Szabo::norme(Gaussienne gaussienne, Atome atome) { 
    return sqrt(pow(gaussienne.GetX()-atome.x,2)+pow(gaussienne.GetY()-atome.y,2)+pow(gaussienne.GetY()-atome.y,2)); 
} 

double Szabo::norme(Gaussienne gaussienneA, Gaussienne gaussienneB) 
{ 
    return sqrt(pow(gaussienneA.GetX()-gaussienneB.GetX(),2.0) + pow(gaussienneA.GetY()-gaussienneB.GetY(),2.0) + pow(gaussienneA.GetZ()-gaussienneB.GetZ(),2.0)); 
} 

Gaussienne & Atome(クラス&構造)は次のように定義される:

Atome:

struct Atome 
{ 
    double x; double y; double z; double numeroAtomique; 
}; 

ガウシアン:

#ifndef GaussienneHeader 
class Gaussienne 
{  
    protected: 
     // attributs 
     double alpha; 
     double coordX,coordY,coordZ; 
    public: 
     // methodes: 

      // Constructeurs: 
      Gaussienne(); 
      Gaussienne(double alpha,double x, double y, double z); 

      // Accesseurs: 
      double GetAlpha() const; //return this->alpha 
      double GetX() const; //return this coordX 
      double GetY() const; // return this coordY 
      double GetZ() const; // return this coordZ 

}; 

#define GaussienneHeader 
#endif 

ここで、2ガウスの中心A & Bと(0,0,0)にある原子の間のノルムを計算したいと思います。

私はこの電話の際

Gaussienne gaussienneP(0,(gaussienneA.GetX()+gaussienneB.GetX())/2.0,(gaussienneA.GetY()+gaussienneB.GetY())/2.0,(gaussienneA.GetZ()+gaussienneB.GetZ())/2.0); 

にprevousの中心の座標を格納するために、このような「プレースホルダ」ガウスを作成します。

Szabo::norme(mygaussian,atome) 

を私が呼び出すときとは異なる結果を得ましたこの:

/* using this constructor: Gaussienne(double alpha,double x, double y, double z) with a dummy alpha = 0; */ 
Szabo::norme(mygaussian,Gaussienne(0,atome.x,atome.y,atome.z) 

Fortunatly私はいくつかの「キヤノン」プログラムに私の結果を比較することができますので、私はKN 2つのガウス関数のノルム関数は良い結果を返しますが、他のものはそうではありません。

誰も私にこのことの奇妙な動作に関する説明を提供できますか?おかげ

答えて

1

が、私はエラーがここにあると思う:

double Szabo::norme(Gaussienne gaussienne, Atome atome) { 
    return sqrt(pow(gaussienne.GetX()-atome.x,2)+pow(gaussienne.GetY()-atome.y,2)+pow(gaussienne.GetY()-atome.y,2)); 
} 

y成分が2回使用され、それは次のようになります。

double Szabo::norme(Gaussienne gaussienne, Atome atome) { 
    return sqrt(pow(gaussienne.GetX()-atome.x,2)+pow(gaussienne.GetY()-atome.y,2)+pow(gaussienne.GetZ()-atome.z,2)); 
} 
+0

私は愚かな、おかげで仲間だLMAO。 ) – Devolution

+0

あなたは大歓迎です:) –

+1

@devoこれは 'location'型を記述し、その上に' operator-'を定義し、' length_squared'と 'length'とスカラ除算/乗算。その後、他のロジックの途中でcoord固有のものをテストして停止します。エラーは簡単ですから。 – Yakk