当前位置: 首页 > 知识库问答 >
问题:

为什么兰德()+兰德()会产生负数?

周作人
2023-03-14

我观察到rand()库函数,当它在循环中被调用一次时,它几乎总是产生正数。

for (i = 0; i < 100; i++) {
    printf("%d\n", rand());
}
for (i = 0; i < 100; i++) {
    printf("%d = %d\n", rand(), (rand() + rand()));
}

共有1个答案

关翰
2023-03-14

rand()被定义为返回0rand_max之间的整数。

rand() + rand()

可能会溢出。您所观察到的很可能是由整数溢出引起的未定义行为的结果。

 类似资料:
  • 我在一个项目中用C实现了一个hashmap,并使用随机插入来测试它。我注意到Linux上的似乎比Mac上重复数字的频率要高得多。在两个平台上都是。我将它简化为一个测试程序,它创建一个字节数组-long,生成随机数,注意每个随机数是否重复,并从列表中检查。 Linux始终如一地生成了大约7.9亿个副本。Mac始终如一地只生成一个,因此它几乎不重复地遍历它可以生成的每个随机数。谁能给我解释一下这是怎么

  • 1.这个项目是什么样的背景下做的? 2.这个产品的架构是什么样子,核心价值是什么? 3.活动与建筑物关联是怎么个关联? 4.活动是怎么获取的? 5.原型图做了多久?主要负责哪部分? 6.有跟进最后多少人使用?数据是如何获取的? #产品2023笔面经#

  • 7.调研了哪些用户?结论是什么? 8.对产品经理这个岗位有什么了解? 9.产品经理主要做什么? 10.c端产品与b端产品?c端产品更加注重直接用户的体验,要考虑在用的用户想法;b端产品的功能一般是降本增效,所以我们要考虑b端产品的功能是什么,在与用户体验感比较下,更加注重功能的效率 11.对人工智能有什么了解? #产品2023笔面经#

  • 我有一项任务,阐述C代码(在x86上运行)的一些看似奇怪的行为。我可以很容易地完成其他一切,但这件事真的让我困惑。 代码段1输出

  • 几天前,我在Cassandra 1.2中删除了一列,方法是:1.删除整个表,2.重新创建表,不带列,3.插入插入语句(不带列)。 我之所以那样做,是因为Cassandra 1.2不支持“降列”操作。 今天,由于数据损坏问题,Ops团队通知了我。我的问题: > 根本原因是什么? 怎么修? 错误[read stage:79]2014-11-04 11:29:55,021 CassandraDaemon