gpt4 book ai didi

无法从 "warning: conversion to ' 解决 'int' long unsigned int'

转载 作者:太空宇宙 更新时间:2023-11-03 23:42:59 25 4
gpt4 key购买 nike

当我编译时mt19937ar.c ,一个非常标准的随机数生成器,我一直在使用它需要的一些代码时遇到问题。

In function 'init_genrand':

warning: conversion to 'long unsigned int' from 'int' may change the sign of the result

/* Period parameters */  
#define N 624
#define M 397
#define MATRIX_A 0x9908b0dfUL /* constant vector a */
#define UPPER_MASK 0x80000000UL /* most significant w-r bits */
#define LOWER_MASK 0x7fffffffUL /* least significant r bits */

static unsigned long mt[N]; /* the array for the state vector */
static int mti=N+1; /* mti==N+1 means mt[N] is not initialized */

/* initializes mt[N] with a seed */
void init_genrand(unsigned long s)
{
mt[0]= s & 0xffffffffUL;
for (mti=1; mti<N; mti++) {
mt[mti] =
(1812433253UL * (mt[mti-1] ^ (mt[mti-1] >> 30)) + mti);
/* See Knuth TAOCP Vol2. 3rd Ed. P.106 for multiplier. */
/* In the previous versions, MSBs of the seed affect */
/* only MSBs of the array mt[]. */
/* 2002/01/09 modified by Makoto Matsumoto */
mt[mti] &= 0xffffffffUL;
/* for >32 bit machines */
}
}

具体来说,错误在于

mt[mti] = 
(1812433253UL * (mt[mti-1] ^ (mt[mti-1] >> 30)) + mti);

我试过通过

mt[mti] = (long unsigned int)
(1812433253UL * (mt[mti-1] ^ (mt[mti-1] >> 30)) + mti);

这确实没有意义,但我只是在尝试一些事情。这段代码来自 1997 年——估计现在有人会发现并修复它。我该如何解决这个问题?或者让我的编译器停止哭泣?

最佳答案

您需要将 mti 的类型更改为 unsigned intunsigned long int

static unsigned int mti = N+1;

因为 mti 将在您给定的表达式中被提升为 unsigned long

关于无法从 "warning: conversion to ' 解决 'int' long unsigned int',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40733810/

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