johnnyyuqi 2021-10-30 16:22 采纳率: 100%
浏览 137
已结题

正数乘正数后取余为什么结果有负数

本人用线性同余法编写了一个产生0,1之间均匀分布的随机数程序,明明都是正数和正数相乘,但结果却含有负值,始终搞不明白为什么,求指点。谢谢

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;
void main()
{   

    FILE*fp;
    fp = fopen("myrandom.txt", "w");
    if (fp != NULL)
    { 
    double n;
    double ex=0;
    double x0;
    cout << "请输入要产生的随机数个数";
    cin >> n;
    cout << "请输入初始种子";
    cin >> x0;
    int x = x0;
    double k = 0;
    for (int i = 0; i < n; i++)
    {
        
        x = (x * 16807) % 2147483647;//进行线性同余的计算
        double m = x / 2147483607.0;
        k = k + m;
        fprintf(fp, "%10.8f ", m);
        cout << endl;
    }
    ex = k / n;
}

img

在某一次运算时x就变为负的了!

img

  • 写回答

1条回答 默认 最新

  • 信仰869 2021-10-30 16:30
    关注

    int x会越界,循环到第三次x*16807会超出int范围

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 11月7日
  • 已采纳回答 10月30日
  • 创建了问题 10月30日

悬赏问题

  • ¥15 优质github账号直接兑换rmb,感兴趣伙伴可以私信
  • ¥15 错误(10048): “调用exui内部功能”库命令的参数“参数4”不能接受空数据。怎么解决啊
  • ¥15 安装svn网络有问题怎么办
  • ¥15 Python爬取指定微博话题下的内容,保存为txt
  • ¥15 vue2登录调用后端接口如何实现
  • ¥65 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)