某些高斯随机码

时间:2015-06-22 14:34:23

标签: c++ gaussian int64

所以我正在阅读一本AI书,它正在讨论高斯随机性,它包含了这个示例代码

unsigned long seed = 61829450;
double GaussianRand()
{
  double sum = 0;
  for (int i = 0: i < 3; i++)
    {
       unsigned long holdseed = seed;
       seed^= seed << 13;
       seed^= seed >> 17;
       seed^= seed << 5;
       long r = (Int64)(holdseed + seed);
       sum += (double)r * (1.0/0x7FFFFFFFFFFFFFFF);
    }
  return sum; //returns [-3.0, 3.0] at (66.7%, 95.8%, 100%)

因此,我在大学里使用C ++学到的一些知识,我用它做了这个。

#include <iostream>
#include <random>
#include <inttypes.h>

using namespace std;

double GaussianRand();

int main()
{
  GaussianRand();
}

double GaussianRand()
{
  double sum = 0;
  for (int i = 0; i < 3; i++)
    {
      unsigned long holdseed = seed;
      seed^= seed << 13;
      seed^= seed >> 17;
      seed^= seed << 5;
      long r = (Int64)(holdseed + seed);
      sum += (double)r * (1.0/0x7FFFFFFFFFFFFFFF);
    }
  return sum;
}

我遇到的问题是不了解Int64是什么或我应该如何使用它。我搜索了一些东西,我想我只是在混淆自己,因为我之前没有真正看过这个或者学过它。 int64_t和Int64一样,还是两个完全不同的东西?

------------------这是我在昨天推出的更新---------------------- -

所以经过一段时间的游戏,我发现要使用Int64我必须使用

using namespace System;

代码行。为此,我必须创建一个CLR控制台应用程序项目,并将代码粘贴在那里。代码现在看起来像这样

&#13;
&#13;
#include "stdafx.h"
#include <iostream>
#include <random>

using namespace System;
using namespace std;

unsigned long seed = 61829450;
double GaussianRand();

int main()
{
	GaussianRand();
}

double GaussianRand()
{
	double sum = 0;
	for (int i = 0; i < 3; i++)
	{
		unsigned long holdseed = seed;
		seed ^= seed << 13;
		seed ^= seed >> 17;
		seed ^= seed << 5;
		long r = (Int64)(holdseed + seed);
		sum += (double)r * (1.0 / 0x7FFFFFFFFFFFFFFF);
		cout << sum << endl;
	}
	cout << sum << endl;
	return sum;  /// returns [-3.0, 3.0] at [67.7%, 95.8%, 100%]
}
&#13;
&#13;
&#13;

它编译并运行没有任何问题。

感谢所有帮助我解决问题的人

1 个答案:

答案 0 :(得分:0)

Int64 不是标准C ++。 不难看出在32位系统上没有使int == int32_t == long成为可能的解决方法。出于同样的原因,在64位系统上无法生成long == int64_t == long long

将此包含添加到您的项目中:

#include <inttypes.h>

然后使用uint64_tint64_t

<stdint.h><inttypes.h>之间有什么区别?

<inttypes.h>包含<stdint.h>,只需添加更多宏/函数。所以两者都应该没问题。

enter image description here