丹麦研究者Thomas Ahle和J. B. T. Knudsen上周在Show HN上贴出一个多项式求值工具。给定任意首一多项式,工具能自动生成一套只需⌊n/2⌋+1次乘法的求值链。九次多项式的示例里,乘法次数从Horner法的8次降到5次,代价是加法从9次涨到20次。

标题写的是"compute polynomials twice as fast",这个说法只对了一半。乘法次数确实接近减半,但这靠的是提前把系数换算成一组精确有理数,加法、预处理、硬件流水线的账还没算进去。乘法变少不代表整体算得快一倍,能不能省时间要看具体场景。

5次乘法怎么来的:预处理换加法

九次多项式的例子里,新方法用5次乘法、20次加法,乘法深度4。系数在正式计算前要先转换成一组精确有理数,这一步就是预处理,只需要做一次,前提是多项式系数本身固定不变。

对比Horner:8次乘法、9次加法,计算链条从头到尾串行,深度高达8。Estrin更适合并行,深度同样是4,但乘法反而涨到11次,其中4次是给常数做乘法。

方法乘法次数加法次数乘法深度备注
新方法5204精确有理数预处理
Horner8981819年提出,全程串行
Estrin11(含4次常数乘)94利于并行,乘法数更多
Knuth–Eve595数值逼近根,误差约7.9×10⁻¹¹
Pan5144数值逼近根,误差约1.0×10⁻¹¹
Rabin–Winograd8(工具给出的示例值)1241972年提出n/2渐进结果,这组示例数字与渐进值口径不一致,存疑
九次多项式:乘法次数对比 新方法 5次 Knuth–Eve 5次(数值) Pan 5次(数值) Horner 8次 Rabin–Winograd 8次 Estrin 11次

乘法数最少的不止新方法一家。Knuth–Eve和Pan两套更早的方案同样只要5次乘法,靠的是数值逼近——系数是用数值方法求出的近似根,误差在10⁻¹¹量级。

新方法的5次乘法换来的常数全是精确有理数,不用容忍这类误差,也不要求多项式满足特定实根条件。Rabin–Winograd在1972年就证明任意n次多项式理论上能压到约n/2次乘法,这也是这次工作站在的地基,但工具给出的九次示例本身显示的是8次乘法,和渐进结果的口径不完全对齐,具体差异没有第三方复核,姑且存疑。

为什么"快一倍"要打折扣

预处理要求系数固定。换一个多项式,常数就要重新算一遍,这一步本身有成本,只对反复调用同一个固定多项式的场景划算。

一般非首一多项式还得多算一次乘法,5次乘法的例子建立在"首一"这个前提上。乘法数少也不等于运行时间少——现代CPU、GPU常把乘和加融合成一条FMA指令,一次乘一次加算作一条流水线操作。新方法用省下的3次乘法换来11次多余的加法,这笔账在FMA普及的硬件上未必划算,具体收益要靠基准测试,这次公开的材料里没有给出。

谁会先用,谁该等等

数值计算、编译器和数学函数库工程师:如果库里已经有针对exp、sin、cos这类函数的定长系数近似,值得查一下能不能把求值链换成这套结构。预处理成本一次性摊掉,调用次数越多越值;但先跑一遍自己的基准,别只看乘法计数就换掉现有的Horner或Estrin实现,FMA硬件上省下的时间可能没那么多。

密码学、哈希函数和纠删码实现者:这类场景的系数往往是协议里定死的常数,天然符合"反复调用同一固定多项式"的条件,值得关注这套工具生成的求值链。但要先确认精确有理数运算在自己的实现里——有限域还是浮点——是否直接适用,论文和编号目前都没法核实,先别急着往生产代码里搬。

接下来最该盯的两件事:论文能不能公开核验,编号arXiv:2609.06022标注的提交日期对应2026年9月,这个日期还没到,是否已经生效目前查不到;有没有人拿它跑真实基准,看浮点、FMA环境下端到端耗时到底降了多少。这两件事没验证之前,"快一倍"只能算作者自己的说法。