- 博客(2382)
- 资源 (119)
- 收藏
- 关注
原创 数值计算Numerical Recipes 3rd Edition学习:5.9 由 Chebyshev 系数直接求导数或积分(Derivatives or Integrals of a Cheby
上一节(5.8 节)我们已经拿到了一个函数 f(x)f(x)f(x) 在区间 [a,b][a,b][a,b] 上的 Chebyshev 系数 c0,c1,…,cn−1c_0,c_1,\ldots,c_{n-1}c0,c1,…,cn−1。现在有一个新的需求:我不仅想要 f(x)f(x)f(x) 本身的值,还想要它的导数 f′(x)f'(x)f′(x) 或者不定积分 F(x)=∫axf(t) dtF(x)=\int_a^x f(t)\,dtF(x)=∫axf(t)dt。最笨的办法是:对 fff 重新做
2026-07-07 12:59:47
319
原创 数值计算Numerical Recipes 3rd Edition学习:复数运算(Numerical Recipes §5.5)
C++ 自带 类,日常写代码时可以完全交给编译器处理复数的加减乘除、开方。但作者提醒了一个反直觉的事实:复数运算并不像看起来那么简单,很多编译器/库在实现复数运算时会在"本该得到正确答案"的地方,无缘无故地产生溢出(overflow)或下溢(underflow)。原因很简单:复数的模长、除法、开方这些运算,如果按照"教科书公式"直接翻译成代码,中间计算步骤里往往会出现一次平方操作(比如 a2a^2a2)。如果 aaa 本身已经是一个很大的数,即使最终答案完全在浮点数可表示范围内,这一步"平方"也可能会先
2026-07-07 12:04:22
183
原创 数值计算Numerical Recipes 3rd Edition学习:级数求和与收敛加速(Series and Their Convergence)
一个解析函数在 x0x_0x0 附近可以展开成幂级数:f(x)=∑k=0∞ak(x−x0)kf(x) = \sum_{k=0}^{\infty} a_k (x-x_0)^kf(x)=k=0∑∞ak(x−x0)k计算上很直接:不需要每次都从头算 (x−x0)k(x-x_0)^k(x−x0)k,而是保留上一次的 (x−x0)k−1(x-x_0)^{k-1}(x−x0)k−1,乘一次就得到新的一项;系数里的 k!k!k! 或 (2k)!(2k)!(2k)! 这类东西,也只需要乘一两次就能从上一
2026-07-07 11:07:41
183
原创 数值计算Numerical Recipes 3rd Edition学习: 5.1节 多项式与有理函数(Polynomials and Rational Functions)
一个 NNN 次多项式,比如:P(x)=c0+c1x+c2x2+c3x3+c4x4P(x) = c_0 + c_1 x + c_2 x^2 + c_3 x^3 + c_4 x^4P(x)=c0+c1x+c2x2+c3x3+c4x4在计算机里,我们不会存"x2x^2x2"、"x3x^3x3"这些符号,而是把它存成一个系数数组 ,其中 是常数项, 是最高次项的系数。这一节要解决的核心问题是:给定这样一个系数数组和一个具体的 xxx 值,怎样才能又快又准地算出 P(x)P(x)P(x)? 以及一
2026-07-07 10:34:38
181
原创 数值计算Numerical Recipes 3rd Edition学习:4.6 高斯求积与正交多项式
在牛顿-科茨公式(比如梯形法、辛普森法)里,我们把积分区间等距分割,取固定间距的点,然后去凑权重系数,让公式对越来越高次的多项式精确。高斯求积的想法很简单也很大胆:点的位置不再固定为等距,而是也当作自由变量去优化。原来只有"权重"这一组自由参数可以调,现在"权重 + 点的位置"两组参数都可以调。自由度翻倍了,直觉上能达到的精确阶数也应该翻倍——事实也确实如此:NNN 个点的牛顿-科茨公式大约能精确处理到 N−1N-1N−1 次多项式,而 NNN 个点的高斯求积能精确处理到 2N−12N-12N−1 次多
2026-07-07 09:37:40
329
原创 数值计算Numerical Recipes 3rd Edition学习:反常积分(Improper Integrals,qromo)详解 —— 从直觉到代码
上一节的 有一个隐含前提:被积函数在整个闭区间 [a,b][a,b][a,b](包括两个端点)上都必须能够被计算出来,而且光滑。但现实中有很多"看起来正常、算起来出问题"的积分,比如:1dx —— 在 x=0x=0x=0 处函数值趋于无穷大,但整个面积其实是有限的(等于 2)。这些统称为反常积分(improper integrals)。原书特别强调:这和"积分不存在"(比如 ∫−∞∞cosx dx\int_{-\infty}^{\infty}\cos x\,dx∫−∞∞cosxdx,根本没
2026-07-06 22:08:24
17
原创 数值计算Numerical Recipes 3rd Edition学习:第4章 函数的积分(引言)从零理解
这一节要解决的问题: 什么是"数值求积分",为什么历史上人们觉得它比一般的数值计算更有"面子"?在微积分发明之前和发明初期,人们发现:把上面的直觉写成正式的公式。原书给出的等价关系是(编号 4.0.1–4.0.3):I=∫abf(x) dx(4.0.1)I = \int_a^b f(x)\,dx \tag{4.0.1}I=∫abf(x)dx(4.0.1)这等价于求解一阶常微分方程dydx=f(x)(4.0.2)\frac{dy}{dx} = f(x) \tag{4.0.2}dxdy=f(
2026-07-06 19:18:13
116
原创 数值计算Numerical Recipes 3rd Edition学习:多维散乱数据插值详解(Interpolation on Scattered Data in Multidimensions)
对应教材 3.7 节。本文从零开始,分四个阶段理解:直觉 → 数学 → 代码 → 使用。上一节(3.6节)讨论的是"规则网格"上的插值——数据像表格一样整整齐齐排列。但现实中很多数据根本不长这样:比如气象站的位置是随机分布在地图上的,传感器的安装位置是工程师根据现场情况随手定的,压根凑不成一个规则网格。这就是"散乱数据插值"(Scattered Data Interpolation)要解决的问题:给你 NNN 个任意分布在 nnn 维空间里的点 (xi,yi)(x_i, y_i)(xi,yi),其中
2026-07-06 18:13:43
139
原创 数值计算Numerical Recipes 3rd Edition学习:插值多项式的系数(Numerical Recipes §3.5)
前面几节(§3.1–3.3)教的是:给定一堆数据点 (xi,yi)(x_i, y_i)(xi,yi),如果我想知道某个新的 xxx 对应的插值结果是多少,该怎么算。那些算法算的是一个"数值"。而 本节要算的不是数值,而是一整条多项式的系数。也就是说,我不满足于"告诉我 x=2.5x=2.5x=2.5 时函数值是多少",我要的是那个唯一穿过所有数据点的多项式长什么样:y=c0+c1x+c2x2+⋯+cN−1xN−1y = c_0 + c_1 x + c_2 x^2 + \cdots + c_{N-1
2026-07-06 18:11:15
72
原创 数值计算Numerical Recipes 3rd Edition学习:多项式插值:拉格朗日公式与 Neville 算法
上一节已经能"找到 xxx 落在哪两个点之间"了,现在的问题是:找到了位置之后,怎么估算 xxx 处的函数值?最简单的做法是线性插值——用左右两个点连一条直线,在直线上读值。但直线只能保证在两个已知点处精确,稍微远一点就不准了。如果已知点本身就在一条曲线上(比如正弦函数),直线估算误差会很大。多项式插值的想法是:用更多的已知点,拟合一条更高阶的曲线,让估算更准确。拿一个具体的例子来说。已知三个点:(这是 f(x)=x2f(x) = x^2f(x)=x2 的采样。)想估算 x=1.5x = 1.5x
2026-07-06 17:08:46
236
原创 数值计算Numerical Recipes 3rd Edition学习:矩阵求逆真的是 $N^3$ 过程吗?—— Strassen 算法详解
本文对应《Numerical Recipes》第 2.11 节 “Is Matrix Inversion an N3N^3N3 Process?”。原书讨论了一个看似不起眼、实则影响深远的问题:矩阵乘法真的必须要 N3N^3N3 次乘法吗?如果乘法能变快,矩阵求逆是不是也能跟着变快?答案由 Strassen 在 1969 年给出,并且相当反直觉。先问一个最朴素的问题:把两个 2×22\times 22×2 矩阵相乘,需要多少次乘法?(a00a01a10a11)(b00b01b10b11)=(c00c01
2026-07-06 15:18:04
296
原创 数值计算Numerical Recipes 3rd Edition学习:2.8 范德蒙德矩阵与 Toeplitz 矩阵
前面讲三对角矩阵(2.4节)和 Sherman-Morrison 秩一修正(2.7节),都是"矩阵长得特殊,所以能比普通高斯消元(O(N3)O(N^3)O(N3))快很多"的例子。这一节介绍另外两种特殊矩阵:想象你测了 3 个点的数据:在 x=1,2,3x=1,2,3x=1,2,3 处,某个二次多项式的取值分别是 y0,y1,y2y_0,y_1,y_2y0,y1,y2。你想知道这个多项式的系数 c0,c1,c2c_0,c_1,c_2c0,c1,c2(即 y=c0+c1x+c2x2y=c_0+c_
2026-07-06 13:37:14
263
原创 数值计算Numerical Recipes 3rd Edition学习:奇异值分解(Singular Value Decomposition, SVD)
前面几节讲的 LU 分解、迭代改进,都建立在一个隐含假设上:矩阵 AAA 是非奇异的(可逆的),只是可能因为病态而丢失一些精度。但如果矩阵真的奇异,或者数值上"非常接近奇异"呢?这时候 LU 分解会彻底失败(除以一个几乎为零的主元,结果完全不可信),你甚至不知道问题出在哪、有多严重。SVD 要解决的问题是:把矩阵 AAA 想象成一台"压缩机":它把一个向量空间里的箭头,映射到另一个向量空间里去。考虑一个刻意设计的、明显奇异的 2×22\times22×2 矩阵(第二行是第一行的 2 倍,所以两行线性相关
2026-07-06 12:36:38
283
原创 数值计算Numerical Recipes 3rd Edition学习:LU分解从零理解
LU分解是数值线性代数里最重要的算法之一,专门用来求解线性方程组 Ax=bAx = bAx=b。这份讲解按照"直觉 → 数学 → 代码 → 使用"四个阶段,把它彻底讲透。假设你要解一个方程组:Ax=bAx = bAx=b最朴素的想法是直接用高斯消元法一步步解出来。但如果你要用同一个矩阵AAA、不同的右端向量bbb反复求解很多次(比如工程计算里经常出现这种场景:系统结构不变,但外部输入条件换了好几组),每次都从头做一遍完整的高斯消元,就非常浪费——因为消元这一步其实只跟AAA有关,跟bbb完全无关,重
2026-07-06 11:27:20
233
原创 数值计算Numerical Recipes 3rd Edition学习:线性代数方程组求解
生活里经常会遇到这种情况:你知道几个量之间满足某些"加权关系",但不知道每个量具体是多少。比如:用上面买水果的例子,设苹果单价为 x0x_0x0,橙子单价为 x1x_1x1:{2x0+3x1=261x0+1x1=11\begin{cases}2x_0 + 3x_1 = 26 \\1x_0 + 1x_1 = 11\end{cases}{2x0+3x1=261x0+1x1=11这里有两个未知数(苹果价格、橙子价格),也有两条方程(两次购物记录)。未知数个数和方程个数刚好相等,这种情况
2026-07-06 10:25:43
285
原创 Intel® 64 and IA-32 Architectures Software Developer’s Manual 卷3学习:系统管理模式(SMM)详解
想象一下:你的电脑正在正常跑着 Windows 或 Linux,突然某个硬件出了点小状况(比如温度太高了,或者某个外设需要紧急处理),这时候操作系统完全不知情的情况下,CPU 悄悄"溜"进了一个隐藏的模式,处理完事情后又"神不知鬼不觉"地回到原来的程序继续跑,就像什么都没发生过一样。这个隐藏模式就是 SMM(System Management Mode,系统管理模式)。打个比方:重要提醒:SMM 是给系统固件(比如 BIOS/UEFI)用的,不是给普通应用软件或者常规系统软件用的。SMM 只能通过一种方
2026-07-05 18:50:54
79
原创 Intel® 64 and IA-32 Architectures Software Developer’s Manual 卷3学习:虚拟机部分
客户机在 VMX 非根模式下跑起来后,大部分指令和平时没区别,但有一批"虚拟化相关"或者"暴露底层硬件信息"的指令(比如VMXONCPUID),不管什么情况都会被强制打断交给管家;还有一批指令(比如HLT、I/O读写、CLTS)是否被打断,取决于管家事先配置好的开关;再加上 PASID 转换、虚拟化异常这些专门给"设备虚拟化"和"高级内存虚拟化"用的特殊机制;
2026-07-05 17:56:45
198
原创 Intel® 64 and IA-32 Architectures Software Developer’s Manual 卷3学习:Intel LBR(末次分支记录)
除了LBR这一整组记录,还有一个单独的、独立的记录,叫LER(Last Event Record,末次事件记录)。在最近一次异常、硬件中断或软件中断发生之前,最后一次发生的跳转。这对调试"程序为什么突然出异常了"特别有用,因为你能直接看到出问题前CPU正准备去哪、刚从哪来。,并且受和LBR一样的开关、过滤规则控制。特性16位程序模块32位程序模块段大小0到64KB0到4GB操作数大小8位和16位8位和32位指针偏移大小(地址大小)16位32位栈指针大小16位32位。
2026-07-05 17:36:11
147
原创 Intel® 64 and IA-32 Architectures Software Developer’s Manual 卷3学习:第16章 指令集扩展和处理器扩展状态的系统编程
这一章接着前面MMX那章往下讲,主要讲SSE系列指令(Streaming SIMD Extensions,流式单指令多数据扩展)以及后来更先进的AVX/AVX-512这些指令集扩展,操作系统在支持这些新指令集的时候要处理哪些系统级细节。跟MMX不一样的是,SSE系列有自己独立的寄存器(XMM寄存器),不像MMX那样蹭浮点寄存器的空间。但既然多了新的寄存器状态,操作系统同样得考虑:怎么保存、怎么恢复、任务切换的时候怎么处理、出错了怎么办这些问题。到了后面AVX、AVX-512这些更新的扩展,寄存器越来越宽
2026-07-05 13:17:48
152
原创 Intel® 64 and IA-32 Architectures Software Developer’s Manual 卷3学习:用户中断(User Interrupts)详解:让用户态程序
以前讲的中断和异常,处理程序都是跑在 CPL=0(内核态)的。这很合理——毕竟中断处理涉及系统底层操作,普通程序不该碰。但这带来一个性能问题:如果一个用户态的应用程序(比如高性能网络程序、用户态驱动)想要快速响应某个事件,传统方式必须"用户态 → 陷入内核态 → 内核处理 → 切回用户态",这一套上下文切换的开销很大,对于需要超低延迟的场景(比如高频交易、高性能存储)来说太慢了。用户中断(User Interrupts) 就是为了解决这个问题:让中断可以直接投递给运行在用户态(CPL=3)的程序,处理程
2026-07-05 12:36:12
333
原创 Intel® 64 and IA-32 Architectures Software Developer’s Manual 卷3学习:Intel 软件开发者手册整体结构从零理解
对比项32位保护模式64位IA-32e模式标志寄存器EFLAGS(32位)RFLAGS(64位)分页级数两级(页目录+页表)四级(PML4+页目录指针+页目录+页表)段的作用完整的分段内存管理大幅弱化,代码/数据/栈段基址通常固定为0中断门新特性无IST新增IST,可指定专用中断栈控制寄存器CR0~CR4CR0~CR4,新增CR8(任务优先级)扩展状态支持无XCR0(早期)XCR0管理向量寄存器等扩展状态内存保护密钥无新增PKRU。
2026-07-05 10:36:15
374
原创 Intel® 64 and IA-32 Architectures Software Developer’s Manual学习:Intel SSE 指令集详解
这一章讲的是 Intel 处理器里的 SSE(流式SIMD扩展指令集)相关内容。简单说,SSE 就是让 CPU 一次能同时处理好几个数字的技术,而不是一个一个算,这样速度更快。下面用大白话把每个部分讲清楚。先说两个找最大最小值的指令:这部分是四种基本的位运算,作用于打包的浮点数上:这几个指令是用来"打乱"或"交叉排列"数据的,常用在图形处理里调整数据顺序。SHUFPS:从目标操作数里挑2个数放到结果的低位,再从源操作数里挑2个数放到结果的高位,从而实现任意顺序的重新排列。假设有两组各4个数字:DEST
2026-07-05 09:06:47
209
原创 Intel® 64 and IA-32 Architectures Software Developer’s Manual学习:第1章:关于这本手册
简单说:这一节其实就是列了个特别长的处理器型号清单,从早期的 Pentium、P6 家族,一路列到 Xeon 系列、Core i7/i5、Xeon Scalable,直到第 9 代 Core 处理器和第 2 代 Xeon Scalable 处理器家族。这里不需要死记硬背这些型号,只要理解一个意思就行:这本手册基本覆盖了 Intel 从早期一直到近些年主流的所有 64 位和 32 位处理器。如果你写的程序要跑在 Intel 处理器上,不管是老古董还是新款,这套手册基本都能查到对应的说明。这一小节其实是全文最
2026-07-04 22:22:18
188
原创 The Garbage Collection Handbook 学习:9.9 空间管理(老年代怎么管)待续
年轻代一般用"疏散"(evacuation)来管理,说白了就是把活下来的对象搬到别的地方去,可能是搬到同一代的另一块空白空间,也可能直接搬去老年代。为什么年轻代能做到又快又勤?因为大部分刚创建的对象活不了多久,一次年轻代回收,能存活下来的对象非常少,需要追踪的东西自然也就很少,所以速度快。老年代就完全反过来了。老年代回收次数很少,但,因为通常要连带把所有比它年轻的代也一起回收掉——除非你愿意付出维护"双向写屏障"的代价(也就是既要记录老指向新,也要记录新指向老,这个开销通常划不来)。
2026-07-04 18:57:37
328
原创 The Garbage Collection Handbook 学习:第八章 堆的分区管理(Partitioning the Heap)
空间(Space):指一组逻辑上接受相同管理策略的对象集合。注意这是"逻辑"概念,不是物理概念。块(Chunk):空间在物理内存上实际占用的一段连续区域,通常是 2 的幂次大小、并按对齐要求摆放(方便通过地址快速判断某块内存属于哪个空间)。也就是说,一个"空间"可以由一个或多个"块"组成。你可以把"空间"理解成仓库里的"分区规则"(比如"生鲜区"“大件区”),而"块"是这个分区规则实际占用的货架。(图1 插入位置:Space 与 Chunk 的关系示意图)
2026-07-04 18:22:10
296
原创 The Garbage Collection Handbook 学习:内存碎片化与分离适配分配
为了在释放对象时能顺利把相邻的空闲块合并起来,很多"分配-释放"系统会给每个内存块额外配一个头部信息,叫做边界标记(Boundary Tag),它存放在程序实际可用的存储空间之外。这个块的大小;这个块目前是"已分配"还是"空闲";(可选)前一个块的大小,这样在需要判断"能不能和前面的块合并"时会更方便;如果这个块是空闲的,还会记录它在空闲链表里的前后指针。所以,一个边界标记有可能长达2 个字,不过通过额外的设计和一些运行时开销,也有可能压缩进1 个字里。
2026-07-04 12:59:14
325
原创 The Garbage Collection Handbook 学习:6.5 自适应系统(Adaptive Systems)
思路名称提出者/年份依据什么做决策是否需要针对新程序重新训练/测试运行时切换(离线画像)Soman等人,2004针对该程序的离线测试结果需要,每个程序单独测试运行时切换(临场比较)Soman等人,2004实时的空间使用率不需要离线测试,但需要运行时持续监控机器学习预测Singer等人,2007程序的静态特性只需一次通用训练,新程序无需重新训练人体工学调优HotSpot相关机制用户设定的吞吐量与暂停时间目标不需要,直接按用户目标反向调节教材还提到了。
2026-07-03 19:23:25
131
原创 The Garbage Collection Handbook 学习:6.2 暂停时间与延迟
概念含义暂停时间(Pause Time)单次垃圾回收动作让 mutator 停顿的时长延迟(Latency)从请求发出到得到响应的实际等待时间,受暂停频率和密集程度共同影响回收器运行前必须暂停全部 mutator 线程级联释放删除一个大结构的最后引用后,引发连锁的递归释放及时性(Promptness)对象死亡到内存被真正回收之间的时间差核心结论回顾:暂停时间短不等于延迟低——密集的短暂停一样会破坏响应性,这对交互式应用和事务处理系统尤其重要。
2026-07-03 18:17:27
116
原创 The Garbage Collection Handbook 学习:5.5 循环引用计数(Cyclic Reference Counting)
当前颜色触发操作去向颜色含义purple(紫)dec,计数仍0>00purple(自环)依然是候选,继续观察purple(紫)mark(markCandidates 阶段)grey(灰)正式进入试探性删除遍历grey(灰)scanBlackblack(黑)发现有外部引用,救回grey(灰)scan,判定为垃圾white(白)确认是垃圾候选white(白)scanBlack 或 collectWhiteblack(黑)
2026-07-03 17:24:29
252
原创 The Garbage Collection Handbook 学习:5.2 提升引用计数的效率
引用计数虽然思路简单,但真正跑起来之后,程序花在"维护计数"这件事本身上的时间可能相当可观,尤其是当这些计数操作还必须做成线程安全的(也就是需要"同步")的时候。有研究团队统计过 Swift 语言的真实程序:即便编译器已经尽力优化、去掉了很多明显多余的计数操作,客户端程序依然有大约 42% 的执行时间花在了引用计数相关的操作上,服务端程序也有大约 15%。这说明,如果不做进一步优化,引用计数的开销是不能忽视的。围绕如何降低这部分开销,业界主要分成两条路线:一条是编译器在静态编译阶段就想办法把不必要的计数
2026-07-03 16:23:44
285
原创 The Garbage Collection Handbook 学习:垃圾回收中的“遍历顺序与局部性“——从零理解
想象你的电脑内存是一栋大房子,程序运行时会不断"造"出很多小物件(对象),用完之后就变成垃圾。复制式垃圾回收(copying GC)的做法是:把还"活着"(还在被使用)的对象,全部搬到一块新的、干净的内存区域里去,旧的地方就整体清空不要了。这些活着的对象之间,本来存在着"引用关系"——比如对象 A 里面有一个指针指向对象 B(B 是 A 的"孩子")。当你把它们都搬到新家的时候,A 和 B 应该挨着放呢,还是可以随便放?局部性原理优先处理完所有热字段,再处理冷字段fill:#333;important。
2026-07-03 14:55:26
316
原创 The Garbage Collection Handbook 学习:3.4 一趟式压缩算法(One-pass Algorithms)—— Compressor
回顾一下前面三种算法,扫描堆的趟数分别是:Compressor 用到两份关键的辅助数据结构(对应图1):这是一个位图,堆里每一个字(word,也就是最小的分配粒度)都对应位图里的一个比特。如果某个字是某个存活对象的起始位置或结束位置,就把对应的比特位设为 1(标记),否则为 0。举个例子:如果某个对象横跨了堆里的第 44 到第 51 个字,那么位图里第 44 位和第 51 位就会被置 1(原书提到,效率更高的做法是只标记"首尾"两个位置,而不是把对象内部所有字都标记一遍;只要知道起点和终点,就能推算出整个
2026-07-03 12:37:18
312
原创 The Garbage Collection Handbook 学习:2.7 标记-清扫算法:需要考虑的问题
(对应图1:Edwards 双指针压缩算法示意图)
2026-07-03 11:36:41
201
原创 The Garbage Collection Handbook 学习:2.4 位图标记(Bitmap Marking)
类型精确(type-accurate)系统:编译器和运行时系统能够精确知道每一个内存槽(对象字段、栈帧变量、寄存器等)里存的到底是不是一个指针。这需要编译器配合生成"哪里是指针"的元数据。保守式(conservative)系统:没有这种精确信息的支持(常见于要给 C/C++ 这类语言做自动回收的场景)。回收器只能猜:如果一个槽里的值"长得像"一个合法的对象引用(比如落在堆地址范围内、对齐正确),就假设它是一个指针。保守式回收的代价是:它有可能把一个根本不是指针的普通整数。
2026-07-03 09:10:56
308
原创 The Garbage Collection Handbook 学习:标记-清除垃圾回收算法:最经典的起点 (之前很多地方没图看不懂把图添加上)
理论上讲,一个对象"是否还会被用到",这个问题叫存活性(liveness),而存活性在数学上是不可判定的问题(跟停机问题类似,无法用算法在有限时间内对所有情况给出准确答案)。前面几节讲了标记-清除算法的具体步骤(New / markFromRoots / mark / sweep),也提前带出过"白、灰、黑"这三种颜色的概念。这一节要把三色抽象为什么要发明这套"颜色"说法?它到底解决了什么问题?三种颜色具体是怎么定义的,转换规则是什么?除了对象,指针、甚至"程序本身"能不能也套上这套颜色说法?
2026-07-02 20:44:47
305
原创 The Garbage Collection Handbook 学习:第1章 引言:为什么需要自动内存管理
比如维护一个"对象池",在某个程序阶段结束时,把整个池子一次性全部释放,而不是一个个对象单独delete。这样能避免"漏删某一个对象"的琐碎错误。fill:#333;important;important;fill:none;color:#333;color:#333;important;fill:none;fill:#333;height:1em;堆分配是现代语言的刚需(灵活性、递归结构等)堆对象的生命周期不像栈对象那样自动结束必须有人决定何时释放堆对象手动决定(程序员来管)自动决定。
2026-07-02 15:08:05
341
原创 Linear Algebra and Its Applications学习:第一章 线性代数中的线性方程组
1949年,哈佛教授瓦西里·列昂惕夫(Wassily Leontief)把最后一批打孔卡片喂进学校的马克II计算机。这些卡片记录了他把美国经济拆分成500个"部门"(比如煤炭业、汽车业、通信业)后,为每个部门写出的一条线性方程——描述这个部门如何把产出分配给其他部门。由于计算机算力有限,他把问题精简为 42个方程、42个未知数 的方程组,机器整整运算了56小时才得到答案。列昂惕夫因此获得了1973年诺贝尔经济学奖。这个故事说明一件事:现实世界中很多复杂问题,最终都会被归结为解一个线性方程组。无论是石油勘探
2026-07-02 11:14:31
322
原创 Introduction to Linear Algebra学习:数值线性代数:矩阵范数、条件数与迭代法
对于一个向量 xxx,我们很自然地用长度 ∥x∥\|x\|∥x∥ 来衡量它的"大小"。但对于矩阵 AAA,情况要复杂一些——因为矩阵不是一个数,而是一个"把向量变成另一个向量"的操作。打个比方:向量的长度就像一个人的身高,一目了然;而矩阵更像一台"拉伸机器",把不同方向的东西拉伸的倍数还不一样。所以矩阵的"大小"(范数)指的是:这台机器最多能把一个向量拉长多少倍。在谈矩阵范数之前,先回顾向量范数(也就是"长度")必须满足的规则,因为矩阵范数会照搬这些规则:矩阵范数完全照搬上面两条规则:∥A+B∥≤∥A∥
2026-07-02 09:44:17
147
原创 Introduction to Linear Algebra学习:从零理解:用线性代数做密码学(Hill 密码 与 有限域)
我们平时用的数字系统是"实数",可以是任意大小、任意小数。但密码学里常常只用有限个数字,比如只用 0 到 25 这 26 个数字(对应英文字母 A~Z)。取模运算(mod) 就是:任何一个整数,除以某个数 ppp 之后,只保留"余数"。举例说明:27=5×5+2⟹27≡2(mod5)27 = 5 \times 5 + 2 \quad\Longrightarrow\quad 27 \equiv 2 \pmod{5}27=5×5+2⟹27≡2(mod5)意思是 27 除以 5,商是 5,余数是 2。
2026-07-02 09:13:10
308
Real-Time C++, 2nd Edition.pdf
2018-06-17
OpenGL ES 3dot0 Cookbook
2018-06-17
OpenCV 3 Blueprints.pdf
2018-06-17
Data Structures & Algorithm Analysis in C++, 4th Edition.pdf
2018-06-17
Learning Boost C++ Libraries.pdf
2018-06-17
OpenCV Computer Vision with Python.pdf
2018-06-17
OpenGL 4 Shading Language Cookbook, Second Edition
2018-06-17
OpenGL Data Visualization Cookbook
2018-06-17
A Practical Introduction to Computer Vision with OpenCV.pdf
2018-06-17
Functional Programming with C++
2018-06-17
Procedural Content Generation for C++ Game Development.pdf
2018-06-17
OpenGL Programming Guide, 8th Edition
2018-06-17
Arduino Computer Vision Programming.pdf
2018-06-17
OpenCV Computer Vision Application Programming Cookbook Second Edition.pdf
2018-06-17
OpenCV 2 Computer Vision Application Programming Cookbook
2018-06-17
Learning Image Processing with OpenCV.pdf
2018-06-17
Practical Algorithms for 3D Computer Graphics, Second Edition.pdf
2018-06-17
Game Programming Using QT.pdf
2018-06-17
Multicore and GPU Programming An Integrated Approach.pdf
2019-03-21
OGLPG-9th-Edition.zip OpenGL编程指南代码(包括资源文件)
2019-10-23
OpenGL 4.5 Reference Pages API + GLSLangSpec.4.60 + glspec46.core
2019-10-22
OGRE 3D 1.7 Application Development Cookbook.pdf
2019-04-20
UNIX网络编程卷1:套接字联网API(第3版) (1).pdf
2019-04-14
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅