math模块篇(四)

news/2024/4/29 7:33:35

文章目录

  • 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.mrgr.cn/p/74841031

相关文章

接单收入超过主业!程序员必备的兼职接单平台汇总

这个月副业接单的款项到账了,由于接了个大单,这个月净收入5w,一下子副业收入超过了主业。不得不说,程序员接单确实是一条赚钱的新路子,都说节流不如开源,这下我是真的体会到了! 今天&#xff0c…

计算机组成原理 — 指令系统

指令系统 指令系统指令的概述指令的格式指令的字长取决于 操作数类型和操作种类操作数的类型数据在存储器中的存放方式操作类型 寻址方式指令寻址数据寻址立即寻址直接寻址隐含寻址间接寻址寄存器寻址寄存器间接寻址基址寻址变址寻址堆栈寻址 RISC 和 CISC 技术RISC 即精简指令…

Camera subdev注册流程

参考资料: 极客笔记https://deepinout.com/camera-sensor-driver/camera-sensor-driver-sensor-subdev-register-flow.htmlCamera驱动模型:用户空间通过CSL协议层,才能访问到Camera subdev,/dev/v4l-subdevx都不是固定的 可以通过cat /sys/class/video4linux/v4l-subdevx/n…

Java设计模式之单例模式(多种实现方式)

虽然写了很多年代码,但是说真的对设计模式不是很熟练,虽然平时也会用到一些,但是都没有深入研究过,所以趁现在有空练下手 这章主要讲单例模式,也是最简单的一种模式,但是因为spring中bean的广泛应用&#…

基于SpringBoot后端实现连接MySQL数据库并存贮数据

目录 一、什么是MySQL数据库 二、基于SpringBoot框架连接MySQL数据库 1、首先添加MySQL依赖: 2、配置数据库连接: 3、创建实体类: 4、创建Repository接口: 5、使用Repository: 三、编写业务SQL语句 1、使用Spring Data…

微服务高级篇(三):分布式缓存+Redis集群

文章目录 一、单点Redis的问题及解决方案二、Redis持久化2.1 单机安装Redis2.2 RDB持久化2.3 AOF持久化2.4 RDB和AOF对比 三、Redis主从3.1 搭建Redis主从架构3.1.1 集群结构3.1.2 准备实例和配置3.1.3 启动3.1.4 开启主从关系3.1.5 测试 3.2 数据同步3.2.1 全量同步【建立连接…

FreeType Glyph Conventions 翻译(4) ——Kerning 字间距调整

原文地址 https://freetype.org/freetype2/docs/glyphs/glyphs-4.html 目录字间距调整对子 Kerning pairs应用字间距调整 Applying kerning The term kerning refers to specific information used to adjust the relative positions of successive glyphs in a string of text…

MHA高可用+VIP漂移

目录一、环境搭建1、关闭防火墙firewalld,selinux2、每台主机安装MySQL二、基于GTID的主从复制1、修改/etc/my.cnf文件2、检查GTID状态3、配置主从复制4、从库设置三、部署MHA1、准备环境(所有节点)2、部署管理节点(可以部署在任何机器上)3、配置ssh信任4、启动测试(mana…

iOS客户端自动化UI自动化airtest+appium从0到1搭建macos+脚本设计demo演示+全网最全最详细保姆级有步骤有图

Android客户端自动化UI自动化airtest从0到1搭建macos脚本设计demo演示全网最全最详细保姆级有步骤有图-CSDN博客 避坑系列-必读: 不要安装iOS-Tagent ,安装appium -这2个性质其实是差不多的都是为了安装wda。注意安装appium最新版本,安装完…

计算机复试面试问答准备(未完)

目录 1、理解多态性2、怎么逆置⼀个链表3、顺序表和链表的区别4、树的存储结构5、什么是哈夫曼树?简述哈夫曼树的构造过程。介绍哈夫曼树的特性。6、哈夫曼编码的编码和解码过程7、图的遍历方式8、图的存储方式9、最小生成树10、迪杰斯特拉算法11、佛洛依德算法12、…

逆向中常见的加密算法

逆向中常见的加密算法 1.Base64 1) 原理与特征: ​ a.原理:将3个byte(即38=24bit)切割为46,然后根据6bit表示的数字在base64表(64byte的表)寻找对应的值;如果待加密字符串长度不为3的整数,则在末尾处补0对齐,其中0对应的字符为=。 ​ b.特征:在反汇编代码中会出现0x…

Flutter逆向

环境配置(Blutter)及使用 参考 [原创]flutter逆向 ACTF native app-Android安全-看雪-安全社区|安全招聘|kanxue.com 其中在编译过程中遇到 -- Configuring done (2.5s) -- Generating done (0.0s) -- Build files have been written to: E:/blutter/build/blutter_dartvm3.4…

创新指南|如何将人工智能应用于未来的创新管理——并不断付诸实践

ChatGPT 的推出加剧了围绕人工智能的炒作,现在我们看到了前所未有的巨大进展。对于我们这些热衷于创新的人来说,这是一个激动人心的时刻。他们正在共同采取措施,充分利用人工智能进行创新管理。本文将阐述人工智能能为创新管理做什么&#xf…

文件包含一-WEB攻防-PHP应用文件包含LFIRFI伪协议编码算法无文件利用黑白盒

演示案例: 文件包含-原理&分类&利用&修复黑盒利用-VULWEB-有无包含文件白盒利用-CTFSHOW-伪协议玩法 #文件包含-原理&分类&利用&修复 1、原理 程序开发人员通常会把可重复使用的函数写到单个文件中,在使用某些函数时&#xff0c…

docker 的八大技术架构(图解)

docker 的八大技术架构 单机架构 概念: 应用服务和数据库服务公用一台服务器 出现背景: 出现在互联网早期,访问量比较小,单机足以满足需求 架构优缺点: 优点:部署简单,成本低 缺点&#xff1…

Java生成p12证书

本文章使用的环境 jdk1.8&#xff0c;spring-boot2.6.13 一、pom依赖 <dependency><groupId>org.bouncycastle</groupId><artifactId>bcprov-jdk15on</artifactId><version>1.49</version></dependency><dependency>&…

PCL点云处理之最小中值平方(Lmeds法)拟合平面(二百三十四)

PCL点云处理之 最小中值平方法(Lmeds)拟合平面(二百三十四) 一、算法介绍一、拟合原理二、具体实现1.代码2.结果一、算法介绍 (本文提供详细注释,输出拟合平面参数和平面点云) Lmeds(Least Median of Squares)是一种统计学方法,用于拟合数据并减少异常值对拟合结果…

Spark-Scala语言实战(5)

在之前的文章中&#xff0c;我们学习了如何在scala中定义与使用集合和元组。想了解的朋友可以查看这篇文章。同时&#xff0c;希望我的文章能帮助到你&#xff0c;如果觉得我的文章写的不错&#xff0c;请留下你宝贵的点赞&#xff0c;谢谢。 Spark-Scala语言实战&#xff08;…

【Web应用技术基础】CSS(6)——使用 HTML/CSS 实现 Educoder 顶部导航栏

第一题&#xff1a;使用flex布局实现Educoder顶部导航栏容器布局 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Educoder</title><script src"https://cdn.staticfile.org/jquery/1.1…

不启动BMIDE,Teamcenter如何查看property的real property name

问题描述&#xff1a; Teamcenter客户端&#xff0c;查看Item 属性&#xff0c;属性名称默认显示的是Display Name。 在各类开发过程中&#xff0c;对属性的操作&#xff0c;需要使用real property name才能进行。开发可能不在server端&#xff0c;没有安装BMIDE&#xff0c;如…