【发布时间】:2018-03-13 13:24:42
【问题描述】:
我正在为我的代码创建随机数,并且我正在使用播种方法进行调试。我想要做的是存储time(NULL) 函数的返回值,srand() 函数将使用它。该值将存储在日志文本文件中,以便用于分析代码中出现的问题。
那么我应该如何printfsrand 函数中用作种子的确切值?
【问题讨论】:
-
未指定。如果是 POSIX,则将其转换为 unsigned long long int。请注意,
time_t在 C 中甚至不需要是 整数,但 POSIX 需要这个。 -
将结果存储在系统支持的最大无符号整数类型中(通常是
uint64_t)这样打印?这是我可以看到它以任何方式接近可移植的唯一方法(考虑到time_t通常 是整数类型)。问题是time_t的实际类型是实现定义的,它可能是浮点类型,甚至是结构。因此,唯一真正可移植的打印方式是作为实际的文本日期时间戳。 -
OTOH,无论如何您都可以将
time_t值转换为unsigned long longfirst,然后使用 that 值作为随机种子 -
@AnttiHaapala 我不完全确定那个副本,因为我在这里闻到了一个 XY 问题,至少如果我正确理解 OP 的意图:能够重现以“随机”运行的程序数字以防万一出现问题...
-
我认为你有一个 XY 问题。如果您想要可重现的伪随机生成,只需为初始化选择一个“随机”但固定的值并保留它。这将是
time()的返回值根本没有意义。
标签: c srand random-seed time-t