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 math

x = 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 math

x = 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.mfbz.cn/a/496601.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【JavaSE】网络编程

定义&#xff1a;在网络通信协议下&#xff0c;不同计算机上运行的程序&#xff0c;进行的数据传输 常见的软件架构&#xff1a; C/S&#xff1a;Client/Server&#xff08;客户端/服务器&#xff09; 在用户本地需要下载并安装客户端程序 画面可以很精美&#xff0c;用户体…

【面试经典 | 150】单词拆分

文章目录 Tag题目来源解题思路方法一&#xff1a;动态规划 写在最后 Tag 【动态规划】【字符串】 题目来源 139. 单词拆分 解题思路 方法一&#xff1a;动态规划 定义状态 定义 dp[i] 表示字符串 s 前 i 个字符组成的字符串&#xff08;s[0, ..., i-1]&#xff09;是否能被…

7.JDK下载和安装

文章目录 一、下载二、安装三、JDK的安装目录介绍 写JAVA代码不是随随便便能写的&#xff0c;我们得先做一点准备工作。例如&#xff0c;我们平时想要玩一把游戏&#xff0c;就需要先下载、安装才能玩游戏。JAVA也是一样的&#xff0c;也是需要下载并安装相关的软件&#xff0c…

2010-2021年银行网点及员工信息数据

2010-2021年银行网点及员工信息数据 1、时间&#xff1a;2010-2021年 2、来源&#xff1a;整理自csmar 3、指标&#xff1a;银行代码、股票代码、银行中文简称、统计截止日期、分行数量、机构网点数量、其中&#xff1a;境内网点数量、其中&#xff1a;境外网点数量、在职员…

[疑难杂症2024-002]一个“显而易见“的问题,是如何进入生产环境的?

本文由Markdown语法编辑器编辑完成。 1. 前言 最近在处理一个在医院上线的系统的问题。这个问题&#xff0c;由于关联的模块比较多&#xff0c;至少涉及到3个模块之间的功能调用。因此&#xff0c;协调大家都有时间来排查问题不是很方便。这个问题就拖了有一周左右。医院那边…

2024-03-28 Quest3 开发环境配置教程

文章目录 准备条件1 登录 Meta 账号2 Oculus 软件下载与配置3 下载 Quest3 开发包4 Unity 环境配置环境测试 准备条件 Quest3 头显一个。一根 USB 3.0 数据线。魔法。 ​ 有关 quest3 激活与配置可参考 B 站 UP &#xff1a;“南七月nqy_”。跳转链接&#xff1a;https://spa…

Exception in thread “main“ com.fasterxml.jackson.databind.JsonMappingException:

问题&#xff1a;jaskson反序列化超出最大长度 Caused by: com.fasterxml.jackson.core.exc.StreamConstraintsException: String length (5043456) exceeds the maximum length (5000000) 场景&#xff1a;前端传递过大base64 原因&#xff1a; jaskon默认已经限制了最大长…

货币系统(闫氏DP分析法)

题目描述&#xff1a; 给定 V 种货币&#xff08;单位&#xff1a;元&#xff09;&#xff0c;每种货币使用的次数不限。 不同种类的货币&#xff0c;面值可能是相同的。 现在&#xff0c;要你用这 V 种货币凑出 N 元钱&#xff0c;请问共有多少种不同的凑法。 输入格式&am…

路由的完整使用

多页面和单页面 多页面是指超链接等跳转到另一个HTML文件,单页面是仍是这个文件只是路由改变了页面的一部分结构. 路由的基本使用 使用vue2,则配套的路由需要是第3版. 1)下载vue-router插件 2)引入导出函数 3)new 创建路由对象 4)当写到vue的router后只能写路由对象,因此只…

CImage 类及其常用成员函数用法实例详解 一

Cimage类是一个用于处理图像的类&#xff0c;它的主要用途是方便地创建、编辑、保存和显示图像。Cimage类支持多种图像文件格式&#xff0c;包括BMP、GIF、JPG、PNG和TIF等。较CBitmap类使用起来更方便。其构造函数及成员函数如下&#xff1a; 下面详细说明CImage常用成员函数的…

解决Animate.css动画效果无法在浏览器运行问题

背景 在开发官方网站的时候&#xff0c;临时更换了电脑&#xff0c;发现原本正常的动画效果突然不动了。 经过 chrome、Microsoft Edge都无法运行。 Animate.css | A cross-browser library of CSS animations. 问题排查 通过审查元素后发现类名是注入并且生效的。 验证 然…

【漏洞复现】企互联-FE企业运营管理平台uploadAttachmentServlet接口存在任意文件上传漏洞

漏洞描述 FE企业运营管理平台(以下简称FE6.5)是基于互联企业云工作台,以移动技术、云计算、大数据处理技术、传感技术等信息技术为支撑,和各类业务系统全面融合的移动化云平台,分为企业版和集团版,能满足各种规模企业的信息化建设需求。FE6.5以移动、平台、社交、云及大…

OpenHarmony实战开发-List组件的使用之设置项

介绍 在本篇CodeLab中&#xff0c;我们将使用List组件、Toggle组件以及Router接口&#xff0c;实现一个简单的设置页&#xff0c;点击将跳转到对应的详细设置页面。效果图如下&#xff1a; 相关概念 CustomDialog&#xff1a;CustomDialog装饰器用于装饰自定义弹窗。List&…

Apifox 新版发布:多分支升级、Query 参数支持枚举、自定义快捷键全面解读

看看本次版本更新主要涵盖的重点内容&#xff0c;有没有你所关注的功能特性&#xff1a; 多分支能力持续升级Query 参数支持枚举等高级配置支持自定义快捷键支持全局设置是否允许返回响应里有额外字段支持导入非 API 的 Markdown 文件更多 CI/CD 平台集成环境变量支持实时协作…

基于springboot+vue+Mysql的“智慧食堂”设计与实现

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

查找总价格为目标值的两个商品【双指针】

这道题实际上跟本专栏上一题属于同一类型&#xff0c;是上一题的简单版&#xff0c;可以点击跳跃。 ⬇ 有效三角形的个数【双指针】 法一&#xff1a;暴力求解 class Solution { public:vector<int> twoSum(vector<int> &nums, int target){int n nums.size()…

Numpy 初体验

文章目录 第1关&#xff1a;Numpy 创建数组第2关&#xff1a;Numpy 数组的基本运算第3关&#xff1a;Numpy 数组的切片与索引第4关&#xff1a;Numpy 数组的堆叠第5关&#xff1a;Numpy 的拆分 第1关&#xff1a;Numpy 创建数组 编程要求 本关的任务是&#xff0c;补全右侧编辑…

用docker在局域网虚拟一个docker虚拟机,支持单独ip,gpu,systemd,在docker里面安装docker

可以实现局域网内虚拟一台linux服务器&#xff0c;效果类似虚拟机&#xff0c;用docker实现&#xff0c;需要注意&#xff0c;这种方式和宿主机是不能通讯的&#xff0c;但是可以和局域网内的设备通讯 觉得好用可以加作者wx: lx-ivan 编写dockerfile vim Dockerfile FROM u…

飞鸟写作怎么用 #经验分享#学习方法#学习方法

飞鸟写作是一款非常好用的论文写作工具&#xff0c;它不仅能够帮助用户写作论文&#xff0c;还可以检测论文的原创性和查重率&#xff0c;是许多学生和研究人员的首选工具。 使用飞鸟写作非常方便&#xff0c;用户只需将论文复制粘贴到工具中&#xff0c;就能够快速得到论文的原…

【Hello,PyQt】控件拖拽

在 PyQt 中实现控件拖拽功能的详细介绍 拖拽功能是现代用户界面设计中常见的交互方式之一&#xff0c;它可以提高用户体验&#xff0c;增加操作的直观性。在 PyQt 中&#xff0c;我们可以很容易地实现控件之间的拖拽功能。本文将介绍如何在 PyQt 中实现控件的拖拽功能。 如何实…