math模块篇(五)

文章目录

  • math.remainder(x, y)
  • math.sumprod(p, q)
  • math.trunc(x)
  • math.ulp(x)
  • math.cbrt(x)
  • math.exp(x)
  • math.exp2(x)
  • math.expm1(x)

math.remainder(x, y)

math.remainder(x, y) 是 Python 3.8 版本中新增的一个函数,用于计算两个数 x 和 y 相除后的余数。这个函数的行为与 % 运算符类似,但在处理负数和零的情况时,其行为更加符合数学上的定义。

math.remainder(x, y) 返回 x - n * y,其中 n 是整数,且 0 <= abs(x - n * y) < abs(y)。如果 y 不为零,那么 n 是 x // y 的整数部分(使用 // 运算符进行整除)。如果 y 为零,则函数将引发 ZeroDivisionError。

这个函数的主要优势在于它提供了更加一致的余数计算方式,尤其是当 x 或 y 是负数时。在 Python 的 % 运算符中,负数的取余行为可能会让人感到困惑,因为结果的符号取决于被除数的符号。而 math.remainder() 函数则始终根据数学上的定义来计算余数,不考虑符号。

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

import math# 计算正数的余数
print(math.remainder(7, 3))  # 输出: 1# 计算负数的余数
print(math.remainder(-7, 3))  # 输出: -1# 计算零的余数
print(math.remainder(0, 3))  # 输出: 0# 计算负数和正数的余数
print(math.remainder(-7, 4))  # 输出: -3# 计算正数和负数的余数
print(math.remainder(7, -4))  # 输出: 3# 尝试除以零,将引发 ZeroDivisionError
try:print(math.remainder(10, 0))
except ZeroDivisionError as e:print(e)  # 输出: division by zero

在这个例子中,你可以看到 math.remainder() 函数在各种情况下如何计算余数,并且结果始终符合数学上的定义。这个函数在处理需要精确余数计算的场景时非常有用,特别是在数学和科学计算中。

math.sumprod(p, q)

在Python的标准库中,math模块并没有提供名为sumprod的函数。可能你是记错了函数名,或者sumprod是某个特定库或自定义函数中的函数。

不过,从字面上来看,sumprod这个函数名暗示了它可能是一个计算两个序列(比如列表或数组)p和q对应元素乘积之和的函数。如果这是你想要的功能,你可以自己定义一个这样的函数。下面是一个简单的实现示例:

def sumprod(p, q):return sum(a * b for a, b in zip(p, q))# 示例用法
p = [1, 2, 3]
q = [4, 5, 6]
result = sumprod(p, q)
print(result)  # 输出:32 (因为 1*4 + 2*5 + 3*6 = 4 + 10 + 18 = 32)

在这个示例中,sumprod函数使用了zip来并行迭代p和q中的元素,并使用列表推导式计算每对元素的乘积,最后使用sum函数计算所有乘积的总和。

如果你在某个特定的库或代码中看到了sumprod这个函数,并且它不是Python标准库的一部分,那么你可能需要查阅该库或代码的文档来了解其确切的用法和行为。

math.trunc(x)

math.trunc(x) 是 Python 中的一个数学函数,用于返回浮点数 x 的整数部分,即去掉小数部分后的值。这个函数的行为与 C 语言中的 trunc 函数类似,并且在 Python 3.2 版本中被引入。

与内置的 int() 函数不同,math.trunc() 总是返回一个浮点数,即使结果是一个整数。如果 x 已经是一个整数,那么 math.trunc(x) 将返回 x 本身。如果 x 是一个正数,则 math.trunc(x) 相当于执行 int(x) 操作;如果 x 是一个负数,math.trunc(x) 将向零方向截断,即向负无穷大方向取整。

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

import math# 对于正数
print(math.trunc(3.7))  # 输出: 3.0# 对于负数
print(math.trunc(-3.7))  # 输出: -3.0# 对于整数
print(math.trunc(4))  # 输出: 4.0# 对于非常大的数
print(math.trunc(1.23e+100))  # 输出: 1.23e+100# 对于非常小的数
print(math.trunc(1.23e-100))  # 输出: 0.0

在这个例子中,你可以看到 math.trunc() 函数如何工作,包括处理正数、负数、整数以及非常大或非常小的数。这个函数在处理需要向零方向截断浮点数时非常有用,特别是当你不希望引入舍入误差时。

math.ulp(x)

math.ulp(x) 是 Python 的 math 模块中的一个函数,用于计算浮点数 x 的“单位最后一位”(Unit in the Last Place,简称 ULP)。这个单位通常指的是在浮点数的表示中,能够表示的最小正差值。换句话说,math.ulp(x) 返回的是浮点数 x 相邻的两个可表示的浮点数的差。

对于正数 x,math.ulp(x) 通常等于 2 ** (mantissa_bits - 1) * x * machine_epsilon,其中 mantissa_bits 是浮点数尾数(mantissa)的位数,machine_epsilon 是机器精度(即 1.0 与大于 1.0 的最小浮点数之间的差)。对于负数 x,math.ulp(x) 的值相同,因为浮点数的 ULP 是对称的。

这个函数在某些情况下很有用,比如当你需要了解浮点数精度限制或者进行精确比较时。由于浮点数的精度限制,两个看起来应该相等的浮点数可能实际上并不相等。使用 math.ulp(x) 可以帮助你了解这种精度差异的大小。

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

import math# 计算正数的 ULP
x = 1.5
ulp_of_x = math.ulp(x)
print(ulp_of_x)  # 输出:1.19209290e-07# 计算负数的 ULP(与正数相同)
x = -1.5
ulp_of_x = math.ulp(x)
print(ulp_of_x)  # 输出:1.19209290e-07# 计算非常小的数的 ULP
x = 1e-300
ulp_of_x = math.ulp(x)
print(ulp_of_x)  # 输出:1.90734863e-309# 计算非常大的数的 ULP
x = 1e300
ulp_of_x = math.ulp(x)
print(ulp_of_x)  # 输出:1.90734863e+309

请注意,由于浮点数的精度是有限的,math.ulp(x) 返回的结果可能不是完全准确的,但它提供了一个关于浮点数精度的大致概念。

math.cbrt(x)

math.cbrt(x) 是 Python 的 math 模块中的一个函数,用于计算浮点数 x 的立方根(cube root)。换句话说,它返回的是 x 的 1/3 次幂。

这个函数在处理需要计算立方根的数学问题时非常有用。例如,在几何学中,计算立方体的体积时就需要用到立方根。

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

import math# 计算正数的立方根
print(math.cbrt(27))  # 输出: 3.0,因为 3 的立方是 27# 计算负数的立方根(结果为负数)
print(math.cbrt(-27))  # 输出: -3.0,因为 -3 的立方是 -27# 计算零的立方根
print(math.cbrt(0))  # 输出: 0.0,因为 0 的立方是 0# 计算非整数的立方根
print(math.cbrt(8))  # 输出: 2.0,因为 2 的立方是 8# 计算非常大的数的立方根
print(math.cbrt(1e100))  # 输出: 4.641588833612779e+33# 计算非常小的数的立方根
print(math.cbrt(1e-100))  # 输出: 1e-33

请注意,math.cbrt(x) 总是返回一个浮点数,即使结果是一个整数。如果你需要一个整数结果,你可以使用内置的 int() 函数来转换结果,但请注意这可能会导致精度损失。

# 将立方根转换为整数(如果可能)
result = int(math.cbrt(8))
print(result)  # 输出: 2

在这个例子中,int(math.cbrt(8)) 将返回整数 2,因为 8 的立方根确实是一个整数。然而,对于非整数的立方根,这种转换会导致精度损失。

math.exp(x)

math.exp(x) 是 Python 的 math 模块中的一个函数,用于计算数学常数 e(约等于 2.71828)的 x 次幂。这里的 x 可以是任何实数。这个函数在科学计算、统计学、工程和其他许多领域都非常有用。

数学上,exp(x) 定义为 e 的 x 次幂,公式为:

exp ⁡ ( x ) = e x \exp(x) = e^x exp(x)=ex
其中 e 是自然对数的底数。

以下是一些使用 math.exp(x) 的例子:

import math# 计算 e 的 0 次幂
print(math.exp(0))  # 输出: 1.0# 计算 e 的 1 次幂
print(math.exp(1))  # 输出: 2.718281828459045# 计算 e 的负一次幂(即 e 的倒数)
print(math.exp(-1))  # 输出: 0.36787944117144233# 计算 e 的其他实数次幂
print(math.exp(2))  # 输出: 7.3890560989306495
print(math.exp(3))  # 输出: 20.085536923187668# 计算 e 的小数次幂
print(math.exp(0.5))  # 输出: 1.6487212707001282# 计算 e 的非常大或非常小的数
print(math.exp(100))  # 输出: 2.718281828459045e+43
print(math.exp(-100))  # 输出: 3.720075976020692e-44

注意,math.exp(x) 总是返回一个浮点数,即使结果是一个整数。此外,由于 e 是一个无理数,所以 math.exp(x) 的结果通常也是无理数,除非 x 是整数或特定的有理数。

这个函数在进行科学计算时非常有用,因为它允许你轻松地计算 e 的任意次幂,这在许多数学和物理公式中都是必要的。

math.exp2(x)

math.exp2(x) 是 Python 中 math 模块的一个函数,它计算的是 2 的 x 次幂,即 2^x。这个函数的名字 “exp2” 指的是 “exponential base 2”,即底数为 2 的指数函数。

例如,如果你调用 math.exp2(3),那么它会返回 8,因为 2^3 = 8。

这里是一个简单的例子,演示如何在 Python 中使用 math.exp2 函数:

import mathx = 3
result = math.exp2(x)print(result)  # 输出 8.0

math.exp2 和 math.exp 函数是不同的。math.exp(x) 计算的是自然对数的底数 e(约等于 2.71828)的 x 次幂,即 e^x。

例如,math.exp(1) 返回大约 2.71828,因为 e^1 ≈ 2.71828。

选择使用 math.exp2 还是 math.exp 取决于你想要计算的是 2 的幂还是 e 的幂。

math.expm1(x)

math.expm1(x) 是 Python 中 math 模块的一个函数,它计算的是 e^x - 1,其中 e 是自然对数的底数(约等于 2.71828)。这个函数的名字 “expm1” 是 “exponential minus one” 的缩写。

使用 math.expm1 可以避免在计算 e^x - 1 时遇到数值精度问题,特别是当 x 接近 0 时。由于浮点数的精度限制,直接计算 e^x - 1 可能会得到一个不精确的结果,而 math.expm1 提供了更精确的计算方法。

例如,如果你想要计算 e^0.000001 - 1,直接使用 math.exp(0.000001) - 1 可能会因为浮点数的精度问题而得到一个不准确的答案。而使用 math.expm1(0.000001) 则可以得到更精确的结果。

下面是一个使用 math.expm1 的例子:

import mathx = 0.000001
result = math.expm1(x)print(result)  # 输出一个更精确的 e^x - 1 的值

请注意,math.expm1 的输入应该是浮点数,输出也是浮点数。如果 x 是一个非常大的正数,e^x 可能会溢出,导致返回 inf(正无穷大)。如果 x 是一个非常大的负数,e^x 可能会下溢,导致返回接近于 0 但不是完全等于 0 的值。在这些极端情况下,math.expm1 的行为将与 math.exp 类似。

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

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

相关文章

Python中的文件读取与保存

1、文件的读取 常用的函数&#xff1a; 1. open()&#xff1a;用于打开文件&#xff0c;可以指定不同的模式&#xff08;读取、写入、追加等&#xff09;来操作文件内容。 2. write()&#xff1a;用于将数据写入文件。 3. close()&#xff1a;用于关闭文件&#xff0c;确保文件…

C++ set 常用部分

文章目录 关键特性定义及初始化一些基本操作查找插入删除清空遍历lower_bound()、upper_bound()set与unordered_set的区别 关键特性 唯一性&#xff1a;Set容器内的元素都是唯一的&#xff0c;每个元素都是不同的有序性&#xff1a;Set容器内的元素总是排序的&#xff08;C中默…

electron+VUE Browserwindow与webview通信

仅做记录 前言&#xff1a; electronVUEVITE框架&#xff0c;用的是VUE3.0 主进程定义&#xff1a;用于接收webview发送的消息 ipcMain.on(MyWebviewMessage, (event, message) > {logger.info(收到webmsg message)//转发给渲染进程}) porelaod/webPreload.js定义 cons…

C语言编译与链接

前言 我们想一个问题&#xff0c;我们写的C语言代码都是文本信息&#xff0c;电脑能直接执行c语言代码吗&#xff1f;肯定不能啊&#xff0c;计算机能执行的是二进制指令&#xff0c;所以将C语言转化为二进制指令需要一段过程&#xff0c;这篇博客讲一下编译与链接&#xff0c;…

跨域问题详解(vue工程中的解决办法)

目录 1. 什么是跨域 2. 如何解决跨域问题 1. 配置request.js 2. 配置vite.config.js 1. 什么是跨域 跨域问题指的是当一个网页的源&#xff08;origin&#xff09;与另一个网页的源不同时&#xff0c;浏览器出于安全考虑&#xff0c;会限制页面中的跨域请求。源是由协议、主…

五种主流数据库:高级分组

除了基本的分组功能之外&#xff0c;GROUP BY 子句还提供了几个高级选项&#xff0c;可以用来实现更复杂的报表功能。 本文比较五种主流数据库实现的高级分组功能&#xff0c;包括 MySQL、Oracle、SQL Server、PostgreSQL 以及 SQLite。 功能MySQLOracleSQL ServerPostgreSQL…

Day26 手撕各种集合底层源码(一)

Day26 手撕各种集合底层源码&#xff08;一&#xff09; 一、手撕ArrayList底层源码 1、概念&#xff1a; ArrayList的底层实现是基于数组的动态扩容结构。 2、思路&#xff1a; 1.研究继承关系 2.研究属性 3.理解创建集合的过程 – 构造方法的底层原理 4.研究添加元素的过程…

vue实现把Ox格式颜色值转换成rgb渐变颜色值(开箱即用)

图示&#xff1a; 核心代码&#xff1a; //将0x格式的颜色转换为Hex格式&#xff0c;并计算插值返回rgb颜色 Vue.prototype.$convertToHex function (colorCode1, colorCode2, amount) {// 确保输入是字符串&#xff0c;并检查是否以0x开头let newCode1 let newCode2 if (t…

关系型数据库mysql(5)存储引擎

目录 一.存储引擎的概念 二. MyISAM 和 InnoDB 2.1MyISAM介绍 2.2MyISAM支持的存储格式 2.2.1静态表&#xff08;固定长度表&#xff09; 2.2.2动态表 2.2.3压缩表 2.3场景举例 2.4.InnoDB 2.4.1场景举例 2.4.2企业选择存储引擎依据 三.查看存储引擎 3.1查看当前数…

IMU预积分【SLAM】

前言 预积分的推导过程比较多&#xff0c;所以这里只记录关键结论。 其实这些公式不太好记忆&#xff0c;因为预积分推导过程的想法来源很巧妙&#xff0c;无法看出物理意义。 预积分定义式&#xff08;必须记住&#xff09; 一切推导的来源&#xff1a; 最好记忆的旋转相对…

c语言教务成绩管理系统1000+

定制魏:QTWZPW,获取更多源码等 目录 题目 代码主函数 教务信息头文件 题目 编写一个C语言程序,实现一个教务成绩管理系统,至少能够管理30条学生信息。其中: 1)学生信息包括:基本信息和成绩信息。 2)基本信息包括:班级,学号,姓名,性别,专业,普通课程选修数…

C++中的STL简介与string类

目录 STL简介 STL的版本 STL的六大组件 string类 标准库中的string类 string类的常用接口 string类对象对容量的操作 size()函数与length()函数 capacity()函数 capacity的扩容方式 reserve()函数 resize()函数 string类对象的操作 push_back()函数 append()函数 operator()函数…

【01-20】计算机网络基础知识(非常详细)从零基础入门到精通,看完这一篇就够了

【01-20】计算机网络基础知识&#xff08;非常详细&#xff09;从零基础入门到精通&#xff0c;看完这一篇就够了 以下是本文参考的资料 欢迎大家查收原版 本版本仅作个人笔记使用1、OSI 的七层模型分别是&#xff1f;各自的功能是什么&#xff1f;2、说一下一次完整的HTTP请求…

1688中国站按关键字搜索工厂数据 API

公共参数 名称类型必须描述keyString是申请免费调用key&#xff08;必须以GET方式拼接在URL中&#xff09;secretString是调用密钥api_nameString是API接口名称&#xff08;包括在请求地址中&#xff09;[item_search,item_get,item_search_shop等]cacheString否[yes,no]默认y…

记录何凯明在MIT的第一堂课:神经网络发展史

https://www.youtube.com/watch?vZ5qJ9IxSuKo 目录 表征学习 主要特点&#xff1a; 方法和技术&#xff1a; LeNet 全连接层​ 主要特点&#xff1a; 主要特点&#xff1a; 网络结构&#xff1a; AlexNet 主要特点&#xff1a; 网络结构&#xff1a; Sigmoid Re…

经典永不过时 Wordpress模板主题

经得住时间考验的模板&#xff0c;才是经典模板&#xff0c;带得来客户的网站&#xff0c;才叫NB网站。 https://www.jianzhanpress.com/?p2484

最详细爬虫零基础教程12——某网评论爬取教程

文章目录 前言一、单页爬取二、翻页案例 前言 本文我们主要是讲述一个某网站评论爬取的案例 一、单页爬取 目标url&#xff1a;https://ke.qq.com/course/380991/12573838881968191?tuin7265bf35#term_id100454125 import jsonpath import requestsif __name__ __main__:#…

HCIP杂记

动态路由的评判标准 占用资源收敛速度选路 动态路由分类&#xff1a; IGP---内部网关协议 DV型---距离矢量型---RIPLS型---链路状态型---OSPFEGP---外部网关协议 OSPF---无类别的路由协议 组播224.0.0.5和224.0.0.6不存在周期更新机制&#xff0c;仅存在触发更新机制&#xff1…

Elasticsearch如何处理多个关键字查询

Elasticsearch (ES) 是一款强大的全文搜索和分析引擎。当针对Elasticsearch进行含有多个关键字的查询时&#xff0c;ES通常会使用其内置的查询DSL&#xff08;Domain Specific Language&#xff09;来处理这些请求。一般来讲&#xff0c;基于多个关键字&#xff0c;可以构建不同…