一个函数中的局部变量的变化会导致一个不相关的函数C++

Local variable in one function changing results in an unrelated function, C++

本文关键字:函数 一个 C++ 不相关 变化 局部变量      更新时间:2023-10-16

只是为了提醒大家,我是一名物理学家,正在编写一个模拟,从专业程序员的角度来看,这可能是一个玩具代码,所以我的编码知识不太好。无论如何,转述700行,我的代码看起来如下:

#define _USE_MATH_DEFINES
#include "MersenneTwister.h"  //Random number generator
#include "Particle.h"         //Class that just keeps track of coordinates
#include <algorithm>
#include <vector>
using namespace std;
const double SomeGlobalParameters;
//Filling an array with gaussian random numbers
void GaussianDisorder(double EnergyArray[Nx][Ny][Nz], double Sigma)
{
    for (int i=0; i<Nx; i++){
        for (int j=0; j<Ny; j++){
            for (int k=0; k<Nz; k++){
                EnergyArray[i][j][k] = rnd.randNorm(0, Sigma);
            }
        }
    }
}
//Using the above array (read only) to do some calculations
void CalcRates(Particle &charge1, const double (&EnergyArray)[Nx][Ny][Nz], double (&RateArray)[12])
{
    int X1 = charge1.xPosition();
    double NearRate, MagSqr, Dist, OldDist, OldEnergy, NewEnergy;    //Declaring stuff for later
    const double Parity=1.0;
    InitializeStuffAbove(SomeGlobalParameters);           // Give stuff values based on parameters
    if (Dist == 0)
        RateArray[0] = NearRate;
    else
        NewEnergy = Parity*EnergyArray2[X1+1][Y1][Z1] - Efield[0] + Coulomb/(Dist);
int main()
{
    double EnergyArray[Nx][Ny][Nz];
    double RateArray[12];
    GaussianDisorder(EnergyArray);
    CalcRates(charge1, EnergyArray, RateArray);
    return 0;
}

我的问题是当我更改时

const double Parity=1.0;

,它是一个局部变量,到

const double Parity=-1.0;

我在中的随机数生成器

void GaussianDisorder

给出了不同的结果,尽管我给了它一个恒定的种子,如果我多次运行代码而不更改任何内容,它会给出相同的序列。如果我遗漏了重要的事情,我会提前道歉。

我猜rnd是在MersenneTwister.h中声明的,如果是函数randNorm(const double mean,const double-stddev)(从这里开始http://www-personal.umich.edu/~wagnerr/MersenneTwister.h)使用函数rand()。为了每次都有不同的值,您应该联合使用rand和srand。看这里:http://www.cplusplus.com/reference/clibrary/cstdlib/rand/.

相关文章: