math模块篇(四)

文章目录

  • math.ldexp(x, i)
  • math.modf(x)
  • math.nextafter(x, y, steps=1)
  • math.perm(n, k=None)
  • math.prod(iterable, *, start=1)

math.ldexp(x, i)

math.ldexp(x, i) 是 Python 中 math 模块的一个函数,用于执行二进制标度操作。它接受两个参数:尾数(mantissa)x 和指数(exponent)i,然后返回 x * (2**i) 的结果。这个函数的名字 “ldexp” 来自 “load exponent” 的缩写,意味着这个函数用于加载或应用一个指数到给定的尾数上。

math.ldexp() 通常用于执行与浮点数表示相关的低级操作,尤其是在处理二进制浮点数表示时。

下面是一些使用 math.ldexp() 的例子:

import math# 使用 ldexp 进行二进制标度操作
print(math.ldexp(1.5, 3))  # 输出: 12.0
# 解释:1.5 * (2**3) = 1.5 * 8 = 12.0print(math.ldexp(0.5, -2))  # 输出: 0.125
# 解释:0.5 * (2**-2) = 0.5 * 0.25 = 0.125# 尾数可以是任意浮点数
print(math.ldexp(3.0, 1))  # 输出: 6.0# 指数可以是任意整数
print(math.ldexp(1.0, 100))  # 输出: 一个非常大的数# 如果尾数是 0,结果总是 0,无论指数是多少
print(math.ldexp(0.0, 42))  # 输出: 0.0

在这些例子中,你可以看到 math.ldexp() 如何通过应用二进制指数来缩放给定的尾数。这个函数在需要直接操作浮点数的二进制表示时非常有用,例如在低级编程、数值分析或科学计算中。

math.modf(x)

math.modf(x) 是 Python 中 math 模块的一个函数,用于将一个浮点数 x 分解为整数部分和小数部分。它返回两个值:x 的整数部分和分数部分(即小数部分)。这两个值作为一个包含两个元素的元组返回,第一个元素是整数部分,第二个元素是小数部分。

math.modf(x) 的名字来自 “modulo function”,虽然它实际上并不执行模数运算(即求余数)。在数学中,“modf” 通常指的是 “modulo function”,但在 Python 的 math 模块中,modf 是用来进行浮点数分解的。

下面是一些使用 math.modf() 的例子:

import math# 分解浮点数
integer_part, fractional_part = math.modf(7.3)
print(integer_part)    # 输出: 7.0
print(fractional_part)  # 输出: 0.3# 另一个例子
int_part, frac_part = math.modf(-2.71828)
print(int_part)      # 输出: -3.0
print(frac_part)     # 输出: 0.28172# 对于正整数,小数部分为 0.0
int_part, frac_part = math.modf(42)
print(int_part)      # 输出: 42.0
print(frac_part)     # 输出: 0.0# 对于负整数,整数部分带有负号,小数部分为 0.0
int_part, frac_part = math.modf(-10)
print(int_part)      # 输出: -10.0
print(frac_part)     # 输出: 0.0

在这个例子中,math.modf(x) 函数将浮点数 x 分解为整数部分和小数部分,并将它们作为元组返回。整数部分总是向负无穷大方向取整(即向零的左侧取整),而小数部分则是 x 减去整数部分的结果。

math.nextafter(x, y, steps=1)

math.nextafter(x, y) 是 Python 中 math 模块的一个函数,它返回 x 之后的下一个可表示的浮点数,这个浮点数在浮点数序列中紧挨着 x 并且朝着 y 的方向。如果没有指定 steps 参数,或者 steps 为 1,那么 math.nextafter(x, y) 就返回 x 之后的下一个可表示的浮点数。如果 steps 大于 1,那么函数会返回 x 之后的第 steps 个可表示的浮点数。

这个函数在需要遍历浮点数的序列,或者在两个浮点数之间寻找中间值时非常有用。由于浮点数的表示是不连续的,math.nextafter() 提供了一种确定的方式来找到序列中的下一个或第 n 个浮点数。

下面是一些使用 math.nextafter() 的例子:

import math# 查找 1.0 之后的下一个浮点数
print(math.nextafter(1.0, 2.0))  # 输出: 1.0000000000000002# 查找 3.0 之前的下一个浮点数
print(math.nextafter(3.0, 2.0))  # 输出: 2.9999999999999996# 查找 0.0 之后的第 3 个浮点数
print(math.nextafter(0.0, 1.0, 3))  # 输出: 4.9406564584124654e-324# 查找 1.0 和 2.0 之间的中间值
mid_value = math.nextafter(1.0, 2.0) / 2
print(mid_value)  # 输出: 0.5000000000000001# 注意:由于浮点数的精度限制,结果可能不会完全符合预期

在这个例子中,math.nextafter() 函数用于找到给定浮点数 x 之后(或之前,如果 y 小于 x)的下一个可表示的浮点数。由于浮点数的精度限制,结果可能不会完全符合预期,尤其是在接近 0 或非常大/小的值时。因此,在使用这个函数时,需要考虑到浮点数的精度问题。

math.perm(n, k=None)

math.perm(n, k=None) 是 Python 3.8 版本中新增的一个函数,它用于计算从 n 个不同元素中取出 k 个元素的所有排列的个数。这个函数实际上计算的是排列数(Permutation),数学上通常表示为 P(n, k) 或 nPk。

如果 k 没有被指定或者为 None,则默认 k 的值为 n,计算的是 n 的阶乘(即 n!)。

函数的签名如下:

math.perm(n, k=None)

其中:

  • n 是整数,表示集合中元素的数量。
  • k 也是整数,表示要选择的元素数量。如果为 None,则默认为 n。

这里有一些使用 math.perm() 的例子:

import math# 计算 5 的阶乘(即 5!)
print(math.perm(5))  # 输出: 120.0# 计算从 5 个元素中取 3 个元素的排列数(即 P(5, 3))
print(math.perm(5, 3))  # 输出: 60.0# 计算从 7 个元素中取 7 个元素的排列数(即 P(7, 7),也等于 7 的阶乘)
print(math.perm(7, 7))  # 输出: 5040.0# 如果 k 大于 n,则结果为 1.0,因为没有足够的元素可以排列
print(math.perm(3, 4))  # 输出: 1.0

请注意,由于这个函数计算的是阶乘和排列数,结果可能非常快就变得非常大,特别是对于较大的 n 和 k 值。此外,由于浮点数精度的限制,对于非常大的结果,可能会有一些精度损失。

如果你需要处理非常大的排列数或者需要更高的精度,可能需要考虑使用专门的数学库,如 mpmath,或者使用其他方法来计算排列数,比如通过迭代方式逐步计算阶乘。

math.prod(iterable, *, start=1)

math.prod(iterable, *, start=1) 是 Python 3.8 版本中新增的一个函数,用于计算可迭代对象(iterable)中所有元素的乘积。这个函数返回 iterable 中所有元素与 start 的乘积。如果 start 没有被指定,则默认为 1。

iterable 可以是一个列表、元组、集合或其他任何可迭代对象,包含用于计算的数字。这些数字可以是整数或浮点数。

  • 在函数签名中是一个特殊的语法,用于指示关键字参数的开始。这意味着所有在 * 之后的参数都必须以关键字参数的形式传递。

下面是一些使用 math.prod() 的例子:

import math# 计算一个列表中所有元素的乘积
numbers = [1, 2, 3, 4]
product = math.prod(numbers)
print(product)  # 输出: 24# 使用起始值
product_with_start = math.prod(numbers, start=10)
print(product_with_start)  # 输出: 240# 计算一个元组中所有元素的乘积
tuple_of_numbers = (1, 2, 5, 10)
tuple_product = math.prod(tuple_of_numbers)
print(tuple_product)  # 输出: 100# 计算一个集合中所有元素的乘积(注意集合是无序的)
set_of_numbers = {2, 3, 5}
set_product = math.prod(set_of_numbers)
print(set_product)  # 输出: 30# 如果 iterable 为空,且 start 为 1,则结果为 1
empty_product = math.prod([])
print(empty_product)  # 输出: 1# 如果 iterable 为空,但 start 不为 1,则结果为 start
empty_product_with_start = math.prod([], start=2)
print(empty_product_with_start)  # 输出: 2

在这些例子中,math.prod() 函数计算了给定可迭代对象中所有元素的乘积,并且可以选择性地使用一个起始值来计算乘积。如果可迭代对象是空的,且起始值为 1,则结果也是 1。如果起始值不为 1,则结果为起始值本身。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/777165.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【unity】如何汉化unity Hub

相信大家下载安装unity后看着满操作栏的英文,英文不好的小伙伴们会一头雾水。但是没关系你要记住你要怎么高速运转的机器进入中国,请记住我给出的原理,不懂不代表不会用啊。现在我们就来把编译器给进行汉化。 第一步:我们打开Uni…

【VTKExamples::Points】第十一期 RadiusOutlierRemoval

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 公众号:VTK忠粉 前言 本文分享VTK样例RadiusOutlierRemoval,并解析接口vtkRadiusOutlierRemoval,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步! 你的点赞就是我的…

【消息队列开发】 实现 MqClientTests 类——测试客户端

文章目录 🍃前言🌳所需属性🌴BeforeEach🌲AfterEach🎍API测试⭕总结 🍃前言 本次开发任务 测试客户端接口 🌳所需属性 所需要一共三个属性 BrokerServer:服务器 ConnectionFa…

考研数学|武忠祥学习包搭配《660》和《880》

一、660、880、三大计算简单分析 660题 这本题册具有高难度、综合度和深度,属于高质量的题材。我建议不要在基础阶段就着手解决其中的660题,因为这可能会影响你的信心。相反,你可以在基础阶段完成一轮学习后,将这些题目留到强化…

安泰ATA-2161高压放大器在生物传感器研究中的应用

生物传感器(biosensor),是一种对生物物质敏感并将其浓度转换为电信号进行检测的仪器,它利用固定化生物成分或生物体作为敏感元件。生物传感器并不专指用于生物技术领域的传感器,它的应用领域还包括环境监测、医疗卫生和…

基于NBIOT的物联网工程实训系统设计与实现

基于NBIOT的物联网工程实训系统设计与实现 **摘要:**随着物联网技术的飞速发展,窄带物联网(NB-IoT)作为其重要分支,在低功耗广域网络通信领域扮演着越来越重要的角色。本文旨在设计并实现一套基于NB-IoT的物联网工程实…

市场复盘总结 20240328

仅用于记录当天的市场情况,用于统计交易策略的适用情况,以便程序回测 短线核心:不参与任何级别的调整,采用龙空龙模式 一支股票 10%的时候可以操作, 90%的时间适合空仓等待 二进三: 进级率中 40% 最常用的…

MySQL 索引:索引为什么使用 B+树?

Hash 索引不支持顺序和范围查询; 二叉查找树(BST):解决了排序的问题,极端情况下可能会退化成线性链表,查询效率急剧下降; 平衡二叉树(AVL) :通过旋转解决了平衡的问题,但是旋转操作效率太低&am…

【推导结果】如何得到 回归均方误差 估计系数的标准误

对线性回归模型系数标准差标准误的理解 1.生成数据 yxe3.610.633.42-1.387.631.017.44-1.0111.651.3811.46-0.63 2.回归 y β 0 β 1 x ϵ y \beta_{0}\beta_{1}x\epsilon yβ0​β1​xϵ y i β 0 β 1 x i e i y_{i}\beta_{0}\beta_{1} x_{i}e_{i} yi​β0​β1​xi…

VTK——自定义二维图像涂抹Widget(支持任意值涂抹),擦除,恢复 vtkCustomPaintWidget

通过鼠标控制 涂抹区域,可以进行,后退,可以进行二维标注,也可以进行回退,也可以任意值涂抹。 vtkCustomPaintWidget 1.标注: 2.擦除 视频: 2D标注 vtkPaint VTK 2D 标注 描绘 2D 擦除&#x…

#Linux(SSH软件安装及简单使用)

(一)发行版:Ubuntu16.04.7 (二)记录: (1)终端键入(root权限)安装 apt-get install openssh-server 安装时遇到报错 E: Could not get lock /var/lib/dpkg/…

规划设计案例分析题

习题一 阅读下列说明,回答问题1至问题4,将解答填入答题纸的对应栏内。 B公司是一家专门提供信息技术服务的供应商,其IT服务事业部设置有热线中心、备件中心、技术服务中心和客户服务中心。其中热线中心主要负责400电话的接听、咨询类问题解答…

Java项目:78 springboot学生宿舍管理系统的设计与开发

作者主页:舒克日记 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 系统的角色:管理员、宿管、学生 管理员管理宿管员,管理学生,修改密码,维护个人信息。 宿管员管理公寓…

2024年数字IC秋招-速腾聚创-数字芯片验证工程师-笔试题

文章目录 前言一、单选题1.Verilog和OOP都具有例化的概念,但是在细节方面却存在一些区别。下面的选项中关于Verilog和OOP中例化的概念说法错误的是()。2、在system verilog中,关于类(class)的说法正确的是:3、关于以下UVM的说法错…

快速上手Spring Cloud 十四:璀璨物联网之路

快速上手Spring Cloud 一:Spring Cloud 简介 快速上手Spring Cloud 二:核心组件解析 快速上手Spring Cloud 三:API网关深入探索与实战应用 快速上手Spring Cloud 四:微服务治理与安全 快速上手Spring Cloud 五:Spring …

蓝桥杯刷题计划-洛谷-持续更新

P8598 [蓝桥杯 2013 省 AB] 错误票据 题目 #include <bits/stdc.h> #define endl \n #define int long long #define INF 0x3f3f3f3f3f const int N 1000010; using namespace std; int arr[N]; signed main() {int N;cin>>N;int idx;while(cin>>arr[idx…

基于ssm的bbs论坛系统

开发环境&#xff1a;idea 前端&#xff1a;JQueryBootstraplayui后端&#xff1a;SpringSpringMVCMybatis数据库&#xff1a;mysqlredis 基于ssm的bbs论坛系统&#xff0c;功能有论坛、导读、动态、排行榜以及后台管理系统等等 话不多说&#xff0c;看图&#xff01;&#x…

AcWing 173.矩阵距离

首先就是上一个时间超时的做法&#xff1a; #include<iostream> #include<stdio.h> #include<cstring> #include<cstdlib> #include<cmath> #include<vector> #include<algorithm> #include<stack> #include<queue> #…

HttpRunner 接口自动化测试框架实战,打造高效测试流程

简介 2018年python开发者大会上&#xff0c;了解到HttpRuuner开源自动化测试框架&#xff0c;采用YAML/JSON格式管理用例&#xff0c;能录制和转换生成用例功能&#xff0c;充分做到用例与测试代码分离&#xff0c;相比excel维护测试场景数据更加简洁。在此&#xff0c;利用业…

VLSM,CIDR,ICMP

IP编址 VLSM&#xff1a;可变长子网掩码 D类是主播&#xff0c;E类是保留 网络位向主机位借位&#xff0c;网络位向右移动。 1.网络位增加 2. 193.1.1.0/24 需求分析如下&#xff1a; CIDR -- 无类域间路由 -- 超网