Int64 в некотором гауссовском коде случайности

Итак, я читаю книгу ИИ, в которой говорится о гауссовой случайности, и она включает в себя этот пример кода

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%]
}

0

Решение

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> и просто добавляет больше макросов / функций. Так что оба должны быть в порядке.

введите описание изображения здесь

0

Другие решения


По вопросам рекламы [email protected]