2016-04-24 47 views
0

奇怪行爲,以便基本上我有一個重載函數來計算範數:爲fuctions

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; 
}; 

Gaussienne:

#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 

所以現在我想計算兩個高斯亞型A & B的中心和位於(0,0,0)的原子之間的範數。

我創建這樣一個「佔位符」高斯存儲prevous的中心,以

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

座標時,我稱之爲:

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) 

很幸運我可以比較我的結果一些「canon」程序,所以我kn因爲與兩位高斯人的規範函數返回了好的結果,但另一個不是。

任何人都可以提供我和解釋有關這種奇怪的行爲?由於

回答

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分量被使用了兩次,它應該是:

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'和標量除法/乘法。然後測試並停止在其他邏輯中寫入座標特定的東西。因爲錯誤很容易。 – Yakk