Итак, я читаю книгу ИИ, в которой говорится о гауссовой случайности, и она включает в себя этот пример кода
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%]
}
Int64 не является стандартным C ++.
Нетрудно видеть, что нет обходного пути, который делает int == int32_t == long
на 32-битных системах. По той же причине, нет никакого способа сделать long == int64_t == long long
на 64-битных системах.
Добавьте это включение в ваш проект:
#include <inttypes.h>
Тогда используйте uint64_t
или же int64_t
,
в чем разница между <stdint.h>
а также <inttypes.h>
?
<inttypes.h>
включает в себя <stdint.h>
и просто добавляет больше макросов / функций. Так что оба должны быть в порядке.