所以我正在阅读一本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控制台应用程序项目,并将代码粘贴在那里。代码现在看起来像这样
#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;
它编译并运行没有任何问题。
感谢所有帮助我解决问题的人
答案 0 :(得分:0)
Int64 不是标准C ++。
不难看出在32位系统上没有使int == int32_t == long
成为可能的解决方法。出于同样的原因,在64位系统上无法生成long == int64_t == long long
。
将此包含添加到您的项目中:
#include <inttypes.h>
然后使用uint64_t
或int64_t
。
<stdint.h>
和<inttypes.h>
之间有什么区别?
<inttypes.h>
包含<stdint.h>
,只需添加更多宏/函数。所以两者都应该没问题。