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

·零落· 2024-08-11 12:35:01 阅读 52

文章目录

一、数字1. 整型(Integer)2. 浮点型(Floating-point)示例注意事项

二、数字运算1. 基本数学运算符2. 使用`<cmath>`库注意事项

三、内置函数四、随机数1. 使用`<random>`库生成随机数2. 解析注意

五、相关链接

一、数字

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

在这里插入图片描述

1. 整型(Integer)

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

<code>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++通过提供丰富的数学运算符和函数库,使得执行各种数学运算变得既简单又高效。

三、内置函数

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

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

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

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

注意

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

在这里插入图片描述

五、相关链接

Visual Studio Code下载地址Sublime Text下载地址「C++系列」C++简介、应用领域「C++系列」C++ 基本语法「C++系列」C++ 数据类型「C++系列」C++ 变量类型「C++系列」C++ 变量作用域「C++系列」C++ 常量知识点-细致讲解「C++系列」C++ 修饰符类型「C++系列」一篇文章说透【存储类】「C++系列」一篇文章讲透【运算符】「C++系列」循环「C++系列」判断「C++系列」函数/内置函数



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。