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因爲與兩位高斯人的規範函數返回了好的結果,但另一個不是。
任何人都可以提供我和解釋有關這種奇怪的行爲?由於
LMAO我是很愚蠢的,感謝兄弟。 ) – Devolution
不客氣:) –
@devo這就是爲什麼你要寫'location'類型,在其上定義'operator-','length_squared'和'length'和標量除法/乘法。然後測試並停止在其他邏輯中寫入座標特定的東西。因爲錯誤很容易。 – Yakk