一个函数中的局部变量的变化会导致一个不相关的函数C++
Local variable in one function changing results in an unrelated function, C++
只是为了提醒大家,我是一名物理学家,正在编写一个模拟,从专业程序员的角度来看,这可能是一个玩具代码,所以我的编码知识不太好。无论如何,转述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/.
相关文章:
- 函数向量_指针有不同的原型,我可以构建一个吗
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 如何仅为一个函数添加延迟
- 构造函数正在调用一个使用当前类类型的函数
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错
- 有一个打印语句的函数是一种糟糕的编程实践吗
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 输入到文件并输出到另一个文件,并将流文件传递给函数
- 我不明白为什么我声明一个空的内部结构并将其传递给构造函数
- 如何创建函数管道,以便函数一个接一个地运行?
- 如何巧妙地编写两个函数——一个用于检查是否存在解决方案,另一个用于获取所有解决方案
- 在c++中的复制构造函数/一个声明语句中的初始化的延续中使用chain方法
- C :基类调用自己的虚拟函数 - 一个反图案
- 如何在这个交换函数(一个单独的链表)中找到错误
- 两个相同的函数(一个使用模板模式,另一个不使用)
- 你怎么能一次给一个函数一个参数呢
- 为什么要做两个函数?(一个是非const,另一个是const)
- 当代码在其他地方使用时,如何保证函数一个接一个地被调用