浮点数比较的三种方法:从绝对误差到Python math.isclose
1. 为什么浮点数比较是个“坑”如果你刚开始用Python或者从其他语言转过来可能会觉得比较两个数字是天经地义、再简单不过的事情。比如你觉得0.1 0.2 0.3这个表达式会返回True吗直觉上这毫无疑问。但如果你在Python的交互式环境里敲下这行代码得到的答案会是False。这恐怕是很多初学者遇到的第一个“魔法”时刻也是浮点数比较这个经典话题的起点。这个现象背后的原因是计算机存储数字的固有方式。我们日常使用的十进制小数比如0.1在转换成计算机内部使用的二进制表示时很多情况下会变成一个无限循环小数就像1/3在十进制里是0.3333...一样。计算机的内存是有限的它只能用有限的位数比如64位也就是双精度浮点数来存储这个无限循环的近似值。这个近似过程就引入了微小的误差。当你对两个带有这种微小误差的数字进行这样的精确比较时结果往往出乎意料。这不仅仅是Python的问题而是所有遵循IEEE 754浮点数标准的编程语言如C、C、Java、JavaScript等的共性问题。所以学会正确地比较浮点数是跨入编程实战的一道必过关卡。无论是做科学计算、数据分析、金融建模还是游戏开发只要涉及小数运算你就绕不开它。接下来我会结合我这些年写代码、调试bug的经验把浮点数比较的三种核心方法掰开揉碎了讲清楚让你不仅知道怎么做更明白为什么要这么做以及每种方法最适合用在什么场景。2. 方法一绝对误差比较法这是最直观、最容易理解的一种方法。它的核心思想是既然两个浮点数很难完全相等那我们就退一步不要求它们“完全一样”只要求它们“足够接近”。这个“足够接近”的距离就是我们设定的一个阈值通常称为“绝对误差容限”或“epsilon”。2.1 绝对误差的计算与实现具体怎么操作呢我们计算两个数a和b差值的绝对值abs(a - b)然后看这个绝对值是否小于我们预设的一个非常小的正数比如1e-9也就是0.000000001。如果小于我们就认为它们“相等”。def is_close_abs(a, b, abs_tol1e-9): 使用绝对误差比较两个浮点数是否相等。 参数: a (float): 第一个浮点数。 b (float): 第二个浮点数。 abs_tol (float): 绝对误差容限默认1e-9。 返回: bool: 如果 |a - b| abs_tol返回True否则返回False。 return abs(a - b) abs_tol # 测试我们开头的例子 print(is_close_abs(0.1 0.2, 0.3)) # 输出: True print(is_close_abs(1.000000001, 1.0)) # 输出: True print(is_close_abs(1000.000000001, 1000.0)) # 输出: True看第一个让我们头疼的问题解决了。通过引入一个容忍度我们绕开了二进制表示带来的微小误差。2.2 绝对误差法的适用场景与陷阱这种方法简单粗暴在特定场景下非常好用。它最适合比较那些数量级或者说绝对值大小相近的数字。比如比较两个物体的坐标都在0到100之间、比较两次传感器读数电压值在0-5V范围内、或者比较图形渲染中两个像素的颜色分量0-1之间。但是它的局限性也非常明显。这个“绝对”的容限值abs_tol是固定的。考虑下面两种情况比较1.0和1.000000001差值是1e-9用默认容限1e-9判断为相等这符合我们的直觉。比较1000000.0一百万和1000000.000001差值同样是1e-6。如果我们还用1e-9作为容限它们会被判断为不相等。但从相对比例来看这个误差只有十亿分之一在实际工程中完全可以忽略不计。反之比较0.000001和0.000002差值是1e-6用1e-9判断为不相等但这个误差高达100%显然不能算作相等。这里就引出了一个关键概念对于很大或很小的数字我们关心的往往是误差相对于数字本身的比例而不是误差的绝对值。绝对误差法无法适应这种动态变化的比例关系。因此当你处理的数字范围跨度很大时比如从显微镜下的纳米尺度到天文距离的光年尺度绝对误差法就会力不从心。实操心得在小型脚本、游戏逻辑坐标、血量等范围确定或硬件接口固定量程的AD采样值中绝对误差法因其简单明了而备受青睐。设定abs_tol时可以比你的系统有效精度再小1到2个数量级。例如你的数据精度是0.01那么容限设为1e-4或1e-5是合理的。3. 方法二相对误差比较法为了解决绝对误差法在数量级差异上的不足相对误差法应运而生。它的核心思想是比较误差相对于数值本身的大小。我们不再看|a-b|有多“小”而是看|a-b|占a或b的比例有多“小”。3.1 相对误差的计算逻辑最常见的实现是计算误差与两数绝对值较大者的比值rel_error |a - b| / max(|a|, |b|)然后判断这个相对误差是否小于一个预设的容限rel_tol例如1e-9。def is_close_rel(a, b, rel_tol1e-9): 使用相对误差比较两个浮点数是否相等。 参数: a (float): 第一个浮点数。 b (float): 第二个浮点数。 rel_tol (float): 相对误差容限默认1e-9。 返回: bool: 如果 |a-b| / max(|a|, |b|) rel_tol返回True否则返回False。 # 防止除零错误如果a和b都精确为0则它们相等 if a 0 and b 0: return True # 计算相对误差 return abs(a - b) rel_tol * max(abs(a), abs(b)) # 测试 print(is_close_rel(1000000.0, 1000000.000001)) # 输出: True (相对误差约1e-12) print(is_close_rel(0.000001, 0.000002)) # 输出: False (相对误差为1.0) print(is_close_rel(1.0, 1.000000001)) # 输出: True (相对误差约1e-9)可以看到对于数量级为1e6的数字即使绝对误差有1e-6相对误差依然极小因此被判定为相等。而对于数量级为1e-6的数字即使绝对误差同样是1e-6但因为相对比例高达100%所以被判定为不等。这更符合我们对“误差”的感知。3.2 相对误差法的优势与“零值”困境相对误差法的优势在于它的自适应性。无论数字是1e-100还是1e100只要相对误差在容限内它们就被认为是“接近”的。这在科学计算、物理仿真、金融模型中非常有用因为这些领域的数据往往跨越多个数量级。然而相对误差法有一个致命的弱点它无法很好地处理接近零的数字。考虑a0.0,b1e-10的情况。它们的绝对值差很小1e-10但相对误差公式中的分母max(|a|, |b|)是1e-10计算出的相对误差是1即100%。按照相对误差法它们会被判定为“不相等”但这显然不符合“它们非常接近零”的直觉。更极端的情况是a0.0,b0.0虽然我们代码中做了特殊判断但a0.0,b1e-20呢它们几乎就是零但相对误差依然是100%。踩坑实录我曾经在一个优化算法中使用相对误差来判断梯度是否接近零以决定是否停止迭代。当参数优化到非常接近最优解梯度理论值为0时由于浮点误差梯度可能是1e-15这样的极小值。用纯相对误差判断1e-15相对于0是无穷大导致算法误以为梯度还很大无法收敛。这是一个典型的“零值困境”。因此纯相对误差法通常需要结合一个“最小除数”或者与绝对误差法联用来安全地处理接近零的情况。这自然引出了第三种也是最健壮的方法。4. 方法三混合误差比较法Pythonmath.isclose的核心混合误差法顾名思义结合了绝对误差和相对误差的优点。它同时检查两个条件绝对误差条件|a - b| abs_tol相对误差条件|a - b| rel_tol * max(|a|, |b|)只要满足其中任意一个条件就认为两个数相等。这种设计非常巧妙当a和b的绝对值较大时相对误差条件起主导作用保证了比例上的接近。当a和b的绝对值非常小接近零时相对误差条件可能过于严苛因为分母很小此时绝对误差条件就能“兜底”只要它们的绝对差值足够小就认为相等。这正是Python标准库math模块中isclose()函数采用的算法。我们来看看它的实现逻辑和用法。4.1 深入math.isclose函数math.isclose(a, b, *, rel_tol1e-9, abs_tol0.0)函数的参数设计体现了混合思想rel_tol: 相对容限必须大于0。默认1e-9意味着允许大约9位十进制数字的误差。abs_tol: 绝对容限必须至少为0。默认是0.0但强烈建议根据实际情况设置。它的判断逻辑如下# 伪代码展示math.isclose的核心逻辑 def isclose_pseudo(a, b, rel_tol, abs_tol): # 快速路径如果精确相等直接返回True包含inf和nan的处理 if a b: return True # 计算差值 diff abs(a - b) # 检查是否满足绝对误差条件 if diff abs_tol: return True # 检查是否满足相对误差条件 # 注意分母是 max(abs(a), abs(b))而不是 (|a||b|)/2 等其他形式 return diff rel_tol * max(abs(a), abs(b))实际使用时我们直接调用即可import math # 案例1处理经典0.10.2问题 print(math.isclose(0.1 0.2, 0.3)) # 输出: True # 默认参数下rel_tol1e-9, abs_tol0.0仅靠相对误差就通过了。 # 案例2处理大数 print(math.isclose(1000000.0, 1000000.000001)) # 输出: True # 案例3处理接近零的数这是关键 print(math.isclose(0.0, 1e-10, abs_tol1e-9)) # 输出: True # 这里必须设置abs_tol因为默认是0。0.0和1e-10的绝对差是1e-10小于我们设定的abs_tol1e-9所以判定为接近。 # 如果不设abs_tol纯靠相对误差分母max(0,1e-10)1e-10相对误差为1判定为False。 # 案例4自定义更宽松的容限 print(math.isclose(1.0, 1.001, rel_tol1e-2)) # 输出: True (允许1%的相对误差)4.2 如何设置rel_tol和abs_tol参数这是使用math.isclose的灵魂所在参数设置不对结果可能南辕北辙。rel_tol相对容限这个值决定了你允许的“相对精度”。1e-9十亿分之一是一个非常高的精度适用于大多数科学计算和双精度浮点数的比较。如果你的数据来自传感器本身噪声就有1%那么rel_tol1e-2百分之一可能更合适。经验法则rel_tol通常可以设为你的计算或数据有效精度的1/10到1/100。例如你的数据只有4位有效数字那么rel_tol1e-4或1e-5是合理的。abs_tol绝对容限这个值是你为“接近零”的区域设定的安全网。它应该设置为比你关心的最小非零数值还要小一个数量级但大于你预期在零附近的累积浮点误差。反面教材如果你比较的是金额单位元abs_tol设为1e-9可能太小了因为一分钱0.01元的误差都不允许。设为1e-2可能更符合业务逻辑允许一分钱以内的误差视为相等。正面案例在几何计算中比较两个点是否重合。如果坐标单位是米那么abs_tol1e-61微米可能是一个合理的阈值因为小于1微米的距离在大多数应用中可视为重合。重要提示math.isclose的abs_tol默认值是0.0。这意味着如果你不显式设置它混合方法就退化成了纯相对误差方法无法处理接近零的比较这是一个常见的坑。我个人的习惯是几乎总是同时指定rel_tol和abs_tol即使abs_tol设为一个很小的数如1e-12也比用默认的0要安全。5. 实战场景分析与方法选型指南了解了三种方法我们来看看在具体场景下如何选择。没有一种方法是万能的选对工具才能事半功倍。5.1 场景一图形与游戏开发坐标、变换矩阵比较在这个领域数据通常有明确的、有限的范围。比如屏幕坐标在[0, 1920]之间3D模型顶点的位置可能在[-10, 10]的区间内。浮点误差主要来源于连续的变换操作旋转、平移、缩放。推荐方法绝对误差法。因为数据范围确定你可以设定一个全局的、合理的abs_tol。例如在像素级别的比较中abs_tol1e-5就足够了因为屏幕空间分辨率有限。在物理引擎中判断两个物体是否碰撞abs_tol可以设为“穿透容忍度”比如0.001米。# 游戏开发中判断两个精灵位置是否“足够接近”以触发事件 def sprites_collided(sprite1_pos, sprite2_pos, collision_threshold0.5): 判断两个精灵是否碰撞使用绝对距离阈值。 distance math.sqrt((sprite1_pos.x - sprite2_pos.x)**2 (sprite1_pos.y - sprite2_pos.y)**2) return distance collision_threshold # 这里本质上是绝对误差比较5.2 场景二科学计算与数值分析求解方程、优化算法这里的数据量级可能天差地别。你可能在解一个方程其根可能是1e-10也可能是1e10。迭代算法的收敛判断是关键。推荐方法混合误差法 (math.isclose)。这是最安全、最通用的选择。用rel_tol保证解的相对精度用abs_tol处理解接近零的情况。import math def newton_raphson(f, df, x0, max_iter100): 牛顿法求根使用混合误差判断收敛。 x x0 for i in range(max_iter): fx f(x) # 判断函数值是否接近零 if math.isclose(fx, 0.0, abs_tol1e-12, rel_tol1e-9): print(f在迭代 {i} 次后收敛于根附近。) return x # 防止除零 if math.isclose(df(x), 0.0, abs_tol1e-14): raise ValueError(导数为零无法继续迭代。) x_new x - fx / df(x) # 判断迭代点是否不再变化收敛 if math.isclose(x_new, x, rel_tol1e-12, abs_tol1e-15): print(f在迭代 {i} 次后收敛。) return x_new x x_new raise RuntimeError(未在最大迭代次数内收敛。)在这个例子中我们用了两个isclose判断一个判断函数值fx是否接近零需要abs_tol另一个判断迭代值x是否稳定也需要abs_tol防止在零附近震荡。5.3 场景三金融与货币计算金融计算对精度要求极高但同时又涉及舍入比如到分。直接使用浮点数进行金融计算本身就是有风险的推荐使用Decimal模块。但如果必须在浮点数框架内比较比如比较两个由浮点数计算得出的收益率或汇率。推荐方法绝对误差法且abs_tol与最小货币单位挂钩。例如比较金额元最小单位是0.01元分。那么abs_tol可以设为0.005半分或者更保守地设为1e-9但最后结果四舍五入到分后再比较。def compare_money(a, b): 比较两个金额浮点数表示单位元考虑分的精度。 # 先将金额四舍五入到分两位小数 a_rounded round(a, 2) b_rounded round(b, 2) # 然后比较四舍五入后的值此时可以使用精确比较或一个极小的abs_tol return math.isclose(a_rounded, b_rounded, abs_tol1e-12)5.4 场景四单元测试 (pytest.approx)写测试时我们需要断言计算结果是正确的。pytest框架提供了approx函数它本质上就是一个智能的混合误差比较器并且API非常友好。import pytest def test_calculation(): result 0.1 0.2 # 使用 approx 进行断言 assert result pytest.approx(0.3) # 也可以指定容限 assert result pytest.approx(0.3, rel1e-6, abs1e-9) # 对于容器内的浮点数 computed_vec [1.0/3.0, 2.0/3.0] expected_vec [0.33333333, 0.66666667] assert computed_vec pytest.approx(expected_vec, rel1e-7)pytest.approx会自动处理相对和绝对误差是编写浮点数相关测试的首选工具。6. 进阶话题与常见陷阱排查掌握了基本方法我们再看一些更深层次的问题和容易踩的坑。6.1NaN和Inf的特殊处理浮点数中有两个特殊值NaN(Not a Number) 和Inf(Infinity)。它们与任何值的比较都是特殊的。NaN NaN返回False。这是IEEE 754标准规定的因为NaN代表一个不确定或无效的值。Inf Inf返回True正无穷等于正无穷。math.isclose(NaN, NaN)返回False。math.isclose(Inf, Inf)返回True。如果你的计算可能产生NaN或Inf在比较前最好先用math.isnan()和math.isinf()进行检查。import math a float(nan) b float(nan) print(a b) # False print(math.isclose(a, b)) # False print(math.isnan(a)) # True c float(inf) d float(inf) print(c d) # True print(math.isclose(c, d)) # True print(math.isinf(c)) # True6.2 误差的累积与传播单个操作的浮点误差可能很小但经过成千上万次运算后误差可能会累积到不可忽视的程度。这在迭代算法如求解微分方程、优化或递归计算中尤为明显。排查思路当你发现比较结果不稳定有时成功有时失败时可能是累积误差在作祟。检查算法稳定性尝试使用数值上更稳定的算法公式。调整容限适当放宽rel_tol或abs_tol以容纳累积误差。但放宽需有度不能掩盖真正的错误。使用高精度数据类型对于关键计算可以考虑使用decimal.Decimal适用于金融或fractions.Fraction适用于有理数或者像mpmath这样的高精度数学库。进行敏感性分析稍微扰动输入数据看输出变化是否在预期范围内。如果变化剧烈说明问题可能对初始条件或舍入误差敏感。6.3 调试浮点数比较失败的完整链路假设你写了一个函数预期输出是expected但实际输出是actual用isclose比较失败了。不要只看结果要深入内部。打印原始值用高精度格式打印两个数。print(fexpected: {expected:.18f}) # 打印18位小数 print(factual: {actual:.18f}) print(fdifference: {actual - expected:.18e}) # 用科学计数法打印差值这能让你直观看到误差有多大。检查isclose的每个条件手动计算并打印绝对误差和相对误差。diff abs(actual - expected) abs_cond diff abs_tol rel_cond diff rel_tol * max(abs(actual), abs(expected)) print(fAbs diff: {diff:.3e}, Abs tol: {abs_tol:.3e}, Abs cond met: {abs_cond}) print(fRel diff: {diff/max(abs(actual), abs(expected)):.3e}, Rel tol: {rel_tol:.3e}, Rel cond met: {rel_cond})这样你就知道是哪个条件没满足。追溯误差来源如果误差远超预期检查你的计算流程。是不是有大量的循环累加是不是用了不稳定的数学公式比如a - b当a和b非常接近时会导致有效数字丢失是不是有不同数量级的数进行了加减运算考虑重构有时改变计算顺序可以改善精度。例如求和时先加绝对值小的数再加绝对值大的数虽然效果有限。对于重要的计算寻求数值分析领域的特定优化方法。浮点数比较不是魔法它是一门基于理解和容忍度的工程艺术。理解二进制表示的本质根据你的应用场景明智地选择比较方法和参数就能让代码既健壮又可靠。记住没有“唯一正确”的容限值只有“最适合当前问题”的容限值。多测试多验证你的直觉会越来越准。

相关新闻

Unity游戏本地化实战:XUnity Auto Translator自动化翻译与配置指南

Unity游戏本地化实战:XUnity Auto Translator自动化翻译与配置指南

1. 项目概述:为什么Unity游戏本地化是门必修课?如果你是一名独立游戏开发者,或者在一个小型团队里负责技术实现,那么“本地化”这个词对你来说,可能既熟悉又陌生。熟悉的是,你知道它意味着要把游戏里的文字…

2026/10/8 18:17:57 阅读更多 →
工业边缘计算实践:基于树莓派CM4与Ignition Edge的HMI解决方案

工业边缘计算实践:基于树莓派CM4与Ignition Edge的HMI解决方案

1. 项目概述:当工业边缘计算遇上现代HMI最近在折腾一个工业现场的边缘数据采集与可视化项目,核心硬件选用了树莓派计算模块CM4驱动的reTerminal DM,而软件栈则决定上Ignition Edge。这个组合听起来可能有点“跨界”——一个是消费级硬件出身的…

2026/10/6 12:53:04 阅读更多 →
前端跨域 iframe 通信别再手写 postMessage:用 iframe-js 实现 ACK、RPC 与状态同步

前端跨域 iframe 通信别再手写 postMessage:用 iframe-js 实现 ACK、RPC 与状态同步

多年前,我因为项目中频繁遇到 iframe 跨域通信问题,写了一个小工具来封装 postMessage。后来这个工具逐渐完善,最终开源成了现在的 iframe-js。 这是我第一次认真写文章介绍这个项目。过去三年里,它从最初只能发送消息&#xff0…

2026/10/9 8:14:57 阅读更多 →

最新新闻

生物分类七级体系“界门纲目科属种”通俗详解与鉴定实操指南

生物分类七级体系“界门纲目科属种”通俗详解与鉴定实操指南

生物分类等级:界门纲目科属种认识一棵树,像认识一个家族。你不需要记住家族里每个人叫什么,但你需要理解辈分怎么排、谁跟谁是什么关系、哪个支脉出了个另类。生物分类等级“界门纲目科属种”,就是给地球上所有生命排的一份家族辈…

2026/10/10 15:36:06 阅读更多 →
基于蒙特卡洛仿真的径向低压馈线WLS状态估计与单相接地分析

基于蒙特卡洛仿真的径向低压馈线WLS状态估计与单相接地分析

1. 项目综述与核心价值看到这个标题,第一反应是“又是个电网状态估计的活儿”,但细看之后发现它其实踩中了一个非常典型的工程痛点:低压配电网不像输电网那样有完善的量测装置,单相接地故障又多,想摸清线路真实运行状态…

2026/10/10 15:36:06 阅读更多 →
文本标注工具REA:轻量级中文NER与关系抽取实践

文本标注工具REA:轻量级中文NER与关系抽取实践

我无法基于当前输入生成符合要求的博文。原因如下:输入中仅提供了项目标题"rea",未提供任何有效上下文:无【项目正文】(原始描述为空)无【关键词】列表(显示为“相关热搜词:最新网络热…

2026/10/10 15:36:06 阅读更多 →
嵌入式学习路线:从零基础到独立项目的完整指南

嵌入式学习路线:从零基础到独立项目的完整指南

很多想认真学嵌入式的人,买回开发板之后做的第一件事,是把商家给的例程编译下载,看到LED闪烁、串口打印出“Hello World”,然后……就没有然后了。我也经历过这个阶段,甚至整整卡了两个月,每天都在“下一个…

2026/10/10 15:36:06 阅读更多 →
5.5k star 却“无共振“:scriptc 在中文社区为什么热而不爆?差的一口气在哪?

5.5k star 却“无共振“:scriptc 在中文社区为什么热而不爆?差的一口气在哪?

5.5k star 却"无共振":scriptc 在中文社区为什么热而不爆?差的一口气在哪? 【免费下载链接】scriptc TypeScript-to-Native Compiler 项目地址: https://gitcode.com/GitHub_Trending/sc/scriptc 一个头顶 Vercel Labs 光环…

2026/10/10 15:36:06 阅读更多 →
从脚本到全栈交付:VibeCoding任务拆解与上下文管理实战复盘

从脚本到全栈交付:VibeCoding任务拆解与上下文管理实战复盘

今天把项目推上线的那一刻,我确实挺开心的。这个项目从需求、原型到前后端代码,绝大部分是靠VibeCoding的方式完成的——我用自然语言描述意图,AI负责生成代码,我来做架构、拆解和验收。这是我从“用AI搞点小脚本”真正转到“用AI…

2026/10/10 15:35:05 阅读更多 →

日新闻

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

1. 从“卫星轨道分类”这个标题说起:为什么值得花时间搞懂第一次接触“卫星轨道分类”这个概念,很多人会觉得它离自己很远——不就是天上的星星怎么转吗?但如果你正在做航天任务规划、遥感数据接收、星座设计,甚至只是准备一场航天…

2026/10/10 0:00:39 阅读更多 →
Spring AOP 核心原理与实战:从概念到日志切面落地

Spring AOP 核心原理与实战:从概念到日志切面落地

1. 从一个真实痛点说起:为什么你的代码里到处都是重复逻辑刚入行那会儿,我写过一个用户管理模块,注册、登录、改密码、注销四个接口。每个接口里都塞了几乎一样的日志打印、参数校验、事务开启和提交。当时觉得没什么,能跑就行。直…

2026/10/10 0:00:40 阅读更多 →
Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

简介:这是一套面向计算机相关专业学生与项目实战学习者的Python数据采集与分析可视化完整项目,以Boss直聘岗位数据为对象,适合用作毕业设计、课程设计或期末大作业。资源包共38个文件,约246KB,以13个py源码文件为核心&…

2026/10/10 0:00:40 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 11:14:25 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 1:36:08 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 11:14:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 5:23:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 10:38:42 阅读更多 →