当前位置: 首页> 汽车> 时评 > 「C++系列」数字/随机数

「C++系列」数字/随机数

时间:2025/8/3 3:49:57来源:https://blog.csdn.net/xuaner8786/article/details/140668743 浏览次数: 0次

文章目录

  • 一、数字
    • 1. 整型(Integer)
    • 2. 浮点型(Floating-point)
    • 示例
    • 注意事项
  • 二、数字运算
    • 1. 基本数学运算符
    • 2. 使用`<cmath>`库
    • 注意事项
  • 三、内置函数
  • 四、随机数
    • 1. 使用`<random>`库生成随机数
    • 2. 解析
    • 注意
  • 五、相关链接

一、数字

在C++中,数字可以以不同的数据类型来表示,这些数据类型决定了数字的大小、范围以及它们能表示的精确度。C++中的数字类型主要分为两大类:整型(Integer)和浮点型(Floating-point)。
在这里插入图片描述

1. 整型(Integer)

整型用于表示没有小数部分的数字。C++提供了多种整型数据类型,以满足不同的存储需求。主要的整型包括:

  • int:最基本的整型,大小通常为4字节(32位),能够表示的数值范围依赖于编译器和平台。
  • short:短整型,大小通常为2字节(16位)。
  • long:长整型,大小至少为4字节(32位),但可能在某些平台上更大(如64位)。
  • long long:长长整型,大小至少为8字节(64位)。
  • char:字符型,通常用于存储字符,但也可以存储小整数(通常是-128到127或0到255,取决于系统是有符号还是无符号的)。
  • unsigned:无符号类型,可以与上述任何整型结合使用(如unsigned intunsigned short等),以表示非负整数,范围是从0到该类型能表示的最大值。

2. 浮点型(Floating-point)

浮点型用于表示有小数部分的数字。C++中的浮点型主要分为两种:

  • float:单精度浮点型,通常占用4字节(32位)。
  • double:双精度浮点型,通常占用8字节(64位),是float的两倍精度。
  • long double:扩展精度浮点型,其大小至少与double相同,但可能更大,具体取决于编译器和平台。

示例

#include <iostream>int main() {int myInt = 10; // 整型float myFloat = 3.14f; // 浮点型,注意末尾的'f'表明这是一个float类型的字面量double myDouble = 3.141592653589793; // 双精度浮点型std::cout << "Integer: " << myInt << std::endl;std::cout << "Float: " << myFloat << std::endl;std::cout << "Double: " << myDouble << std::endl;return 0;
}

注意事项

  • 在处理大数字或需要高精度的场合时,应当选择合适的整型或浮点型数据类型。
  • 浮点型数据在进行数学运算时可能会产生精度误差,因为它们在计算机中是以近似值的形式表示的。
  • 在声明变量时,明确指定变量的类型是一个好习惯,这有助于编译器进行类型检查,避免潜在的错误。

二、数字运算

在C++中,数学运算主要通过运算符和数学库函数来执行。C++标准库中的<cmath>(或在C中对应的<math.h>)提供了大量的数学函数,用于执行各种复杂的数学计算,如三角函数、对数、指数、幂运算、平方根等。

1. 基本数学运算符

C++中的基本数学运算符包括:

  • + 加法
  • - 减法
  • * 乘法
  • / 除法
  • % 求余(仅限整数)

2. 使用<cmath>

要使用<cmath>库中的函数,你需要在程序顶部包含该头文件。然后,你就可以使用诸如sqrt(), pow(), sin(), cos(), tan(), log(), exp()等函数了。

下面是一些使用<cmath>库中函数的例子:

#include <iostream>
#include <cmath> // 包含数学库int main() {double num = 9.0;double root = sqrt(num); // 计算平方根std::cout << "The square root of " << num << " is " << root << std::endl;double base = 2.0;double exponent = 3.0;double result = pow(base, exponent); // 计算幂std::cout << base << " raised to the power of " << exponent << " is " << result << std::endl;double angleRadians = M_PI / 4.0; // 使用M_PI,它是<cmath>中定义的π的值double sine = sin(angleRadians); // 计算正弦值std::cout << "The sine of " << angleRadians << " radians is " << sine << std::endl;return 0;
}

注意事项

  • 当使用<cmath>库中的函数时,请确保你的编译器支持这些函数。大多数现代C++编译器都支持。
  • 一些函数(如sqrt(), log(), sin()等)的参数和返回值通常是double类型,但你也可以使用它们的变体来处理floatlong double类型的数据。例如,sqrtf()sqrtl()分别用于floatlong double类型。
  • 在使用角度进行计算时,请注意大多数数学函数(如三角函数)默认使用弧度作为输入。如果你有一个以度为单位的角度,你需要先将其转换为弧度(弧度 = 度 * π / 180)。
  • 对于整数除法,结果也会是整数。如果你需要小数结果,请确保至少有一个操作数是浮点数。

C++通过提供丰富的数学运算符和函数库,使得执行各种数学运算变得既简单又高效。

三、内置函数

序号函数 & 描述
1double cos(double);该函数返回弧度角(double 型)的余弦。
2double sin(double);该函数返回弧度角(double 型)的正弦。
3double tan(double);该函数返回弧度角(double 型)的正切。
4double log(double);该函数返回参数的自然对数。
5double pow(double, double);假设第一个参数为 x,第二个参数为 y,则该函数返回 x 的 y 次方。
6double hypot(double, double);该函数返回两个参数的平方总和的平方根,也就是说,参数为一个直角三角形的两个直角边,函数会返回斜边的长度。
7double sqrt(double);该函数返回参数的平方根。
8int abs(int);该函数返回整数的绝对值。
9double fabs(double);该函数返回任意一个浮点数的绝对值。
10double floor(double);该函数返回一个小于或等于传入参数的最大整数。

四、随机数

在C++中,生成随机数可以通过多种方式实现,但最常用的方法是利用标准库中的<random>头文件。这个头文件提供了比旧式C的rand()函数更强大、更灵活的随机数生成功能。

<random>库包括多种随机数引擎和分布,你可以组合使用它们来生成符合特定分布的随机数。

1. 使用<random>库生成随机数

以下是一个简单的示例,展示了如何使用<random>库生成一定范围内的随机整数:

#include <iostream>
#include <random>int main() {// 创建一个随机数引擎,这里使用的是默认的随机数引擎,也可以指定其他引擎std::random_device rd; // 用于获取随机种子std::mt19937 gen(rd()); // 以 rd() 作为种子初始化 Mersenne Twister 生成器// 定义随机数分布范围,这里生成的是 [1, 100] 之间的整数std::uniform_int_distribution<> dis(1, 100);// 生成并打印10个随机数for (int n = 0; n < 10; ++n) {std::cout << dis(gen) << ' ';}std::cout << '\n';return 0;
}

2. 解析

  1. 随机数引擎std::mt19937是一个基于Mersenne Twister算法的伪随机数生成器,它以一个无符号整数(种子)作为初始化参数。为了获得尽可能随机的结果,通常使用std::random_device来生成种子,因为它能够产生非确定性的随机数。

  2. 随机数分布std::uniform_int_distribution<>是一个分布,用于生成在指定范围内的均匀分布的整数。在这个例子中,我们生成的是1到100之间的整数。

  3. 生成随机数:通过调用分布对象(dis)并将随机数引擎(gen)作为参数传递给它,我们可以生成一个随机数。这个操作在循环中重复进行,以生成多个随机数。

注意

  • <random>库提供的随机数生成器比rand()函数更加灵活和强大,能够生成符合特定分布的随机数,并且支持自定义随机数生成算法。
  • 在多线程程序中,如果多个线程需要生成随机数,应该为每个线程提供独立的随机数引擎实例,以避免潜在的竞争条件和数据不一致问题。
  • std::random_device在某些平台上可能只是简单地返回一个常量值作为“随机”种子,因此如果你需要高度随机的种子,可能需要考虑其他方法(例如从系统时间、硬件标识符等派生)。然而,在大多数情况下,使用std::random_device作为种子已经足够好了。
    在这里插入图片描述

五、相关链接

  1. Visual Studio Code下载地址
  2. Sublime Text下载地址
  3. 「C++系列」C++简介、应用领域
  4. 「C++系列」C++ 基本语法
  5. 「C++系列」C++ 数据类型
  6. 「C++系列」C++ 变量类型
  7. 「C++系列」C++ 变量作用域
  8. 「C++系列」C++ 常量知识点-细致讲解
  9. 「C++系列」C++ 修饰符类型
  10. 「C++系列」一篇文章说透【存储类】
  11. 「C++系列」一篇文章讲透【运算符】
  12. 「C++系列」循环
  13. 「C++系列」判断
  14. 「C++系列」函数/内置函数
关键字:「C++系列」数字/随机数

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: