gpt4 book ai didi

c - 随机数生成器代码修复(srand48/drand48 的替代方案)

转载 作者:行者123 更新时间:2023-11-30 20:10:29 24 4
gpt4 key购买 nike

首先我要说的是,我对 C 和 C++ 几乎一无所知。事实上,作为一名数学专业的学生,​​我对编程完全陌生。话虽如此,我需要包装一些较旧的代码,因此我正在努力解决它。现在,当尝试运行测试时,我收到错误

Severity Code Description Project File Line Suppression State Error LNK2019 unresolved external symbol srand48 referenced in function main PokerEval C:\Users\M.Faas\Documents\Visual Studio 2017\Projects\Pokerproject\PokerEvalC\PokerEval\allfive.obj 1
Error LNK2019 unresolved external symbol drand48 referenced in function shuffle_deck PokerEval C:\Users\M.Faas\Documents\Visual Studio 2017\Projects\Pokerproject\PokerEvalC\PokerEval\pokerlib.obj 1
Error LNK1120 2 unresolved externals PokerEval C:\Users\M.Faas\Documents\Visual Studio 2017\Projects\Pokerproject\PokerEvalC\PokerEval\x64\Debug\PokerEval.exe 1

对于 drand48 也是如此。

我使用的代码开始如下:

#include <stdio.h>
#include "arrays.h"
#include "poker.h"

void srand48();
double drand48();

并继续在这些代码片段中使用 srand48 和 drand48:

// Seed the random number generator.
srand48(getpid());

对于 drand48:

//
// This routine takes a deck and randomly mixes up
// the order of the cards.
//
void
shuffle_deck(int *deck)
{
int i, n, temp[52];

for (i = 0; i < 52; i++)
temp[i] = deck[i];

for (i = 0; i < 52; i++)
{
do {
n = (int)(51.9999999 * drand48());
} while (temp[n] == 0);
deck[i] = temp[n];
temp[n] = 0;
}
}

完整代码可以在这里找到:http://suffe.cool/poker/code/

但我想不出解决这个问题的方法,尽管它看起来很小。也就是说,速度绝对重要,因为代码将运行数百万次。我在 x64 机器上使用 Visualstudio。

最佳答案

这些声明

void srand48();
double drand48();

已弃用,您应该使用完整原型(prototype):

void srand48(long);
double drand48(void);

或者最好包含声明它们的 header 。

但你的问题是这些功能在 Windows 上根本不存在。所以只需删除这些声明即可。您可以使用标准 srand() 来模拟这些函数(随机数的质量可能稍低)和rand()函数(在 stdlib.h 中声明)如下所示:

#define srand48(x) srand((int)(x))
#define drand48() ((double)rand()/RAND_MAX)

这是一个 PoC 示例:

#include <stdlib.h>
#include <stdio.h>
#include <time.h>

#define srand48(x) srand((int)(x))
#define drand48() ((double)rand()/RAND_MAX)

int main(void)
{
srand48(time(0));

for (;;)
{
printf("%f\n", drand48());
}
}

关于c - 随机数生成器代码修复(srand48/drand48 的替代方案),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45302850/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com