随机数字双重类型

Random numbers double type

本文关键字:类型 数字 随机      更新时间:2023-10-16

我在书中有一个练习,这使我通过一系列尝试的尝试使我难以理解答案,这花了我几个小时才能配置出来。我是C 的新手,并且根本无法编程,这使我缺乏知识(实际上我在家中在家中学习(。因此,我有几个问题,希望您可以回答它们,并在正确的位置"资产"我的大脑。

在问题之前,练习是:

"编写一个随机数发电机,该发电机返回随机浮点 数量在0.0到1.0之间。(提示:致电兰德,将结果r施放为键入 通过使用static_cast(R(来倍,然后除以最高值 在int范围内,rand_max。(确保您用 双返回类型。"。

问题:

  1. srand(time(nullptr))背后的主要功能/想法是什么?我不断收到C4244的警告("参数":从'time_t'转换为" unsigned int"(。我正在搜索答案,我发现问题在srand命令中...请有人可以解释吗?

  2. 我对static_cast和所有其他3种铸造类型都不清楚。我知道在static_cast中,我可以从括号到左侧的括号定义一种新的枚举类型:static_cast<double>(r)。但是,每个铸件的限制/定义是什么(dynamic_castreinterpret_castconst_cast(?我什么时候使用它们?

  3. 我发现我必须在(RAND_MAX(语句之前声明双重,但是我不知道为什么它必须是双倍而不是int或float?RAND_MAX背后的主要思想是什么?

这是我写的代码(注意:我正在使用#include "stdafx.h" pre标头,而在书中没有任何提及(:

#include "stdafx.h"
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
double rand_(int r);
int main() {
    int n;
    double r;
    cout << " choose a number: ";
    cin >> n;
    srand(time(nullptr));
    for (int i = 0; i <= n; i++) {
        r = rand_(n) ;
        cout << r << " ";
    }
    return 0;
}
double rand_(int r) {
    static_cast<double>(r);
    return rand() / double(RAND_MAX);
}

如果您注意到基本编码的任何"许可"错误,请纠正我。

感谢所有回答和支持这篇文章的人。希望将来也可以做同样的事情。

srand(time(nullptr));

它用于初始化伪随机数生成器,并从当前时间获得种子(每次运行Ptogramm时,都会获得不同的运行量数(。srand((接受未静止的int参数,time((return time_t,所以这是您有关转换的警告。

rand() / double(RAND_MAX)

rand((返回整数值,rand_max是整数常数,因此要获取浮点部门,而不是整数部门rand_max进行对话到浮点类型。

至于何时使用哪种类型的铸件,我敢肯定,您可以找到有关So或cppreference上每个特定铸件的信息。