Assembly 指令FYL2XP1

Assembly 指令FYL2XP1,assembly,x86,floating-point,instructions,x87,Assembly,X86,Floating Point,Instructions,X87,我想知道为什么x86体系结构上的指令FYL2XP1精确计算数学公式y·log2(x+1) 这个公式有什么特别之处?操作数y通常是一个编译时常数,暂时忘掉x+1 由于log_b(x)=log_b(2)*log_2(x)该指令允许计算x+1任意基数的对数 请注意,log_b(2)是一个常数,因为很少需要计算底部有自由度的对数 FYL2XP1和FYL2X是计算对数的唯一两条x87指令。 如果对数是一个代数函数,一条指令就足够了,但由于它是超越的,英特尔给出了两个版本 FYL2X适用于对数的全域,但它在

我想知道为什么x86体系结构上的指令
FYL2XP1
精确计算数学公式y·log2(x+1)


这个公式有什么特别之处?

操作数
y
通常是一个编译时常数,暂时忘掉
x+1

由于
log_b(x)=log_b(2)*log_2(x)
该指令允许计算
x+1
任意基数的对数 请注意,
log_b(2)
是一个常数,因为很少需要计算底部有自由度的对数

FYL2XP1
FYL2X
是计算对数的唯一两条x87指令。
如果对数是一个代数函数,一条指令就足够了,但由于它是超越的,英特尔给出了两个版本

FYL2X
适用于对数的全域,但它在整个范围内并不完全准确,尤其是对于非常小的
x
(我认为可能更慢,它必须进行范围缩小,使用截断泰勒展开或Padé近似,而不是通过查表来提高精度)

FYL2XP1
仅适用于小范围±(1–sqrt(2)⁄2)的输入。
这应该更快(无范围缩减),更重要的是,对于给定的输入范围,使用的近似方法的精度应等于或大于x87 80位浮点精度

此指令为接近0的ε值[寄存器ST(0)中的值]提供最佳精度。对于 小ε值,使用FYL2XP1指令比使用 (ε+1)作为FYL2X指令的参数


经过所有其他必要步骤后,
FYL2X
使用的算法可能正在使用
log(x+1)
的近似公式
要将其转换为
log(x)
的公式,必须将输入减去1。如果
x
非常小,则
x-1
操作将失去精度(因为两个数字的指数之间的巨大差异将使
x
的大部分数字向右偏移)。

FYL2XP1
不会执行
x-1
并且不会丢失精度

log(x)
的泰勒级数通常是关于
x=1
的。所以每个学期都有
x-1
。如果您试图为非常小的
x
计算
log(x+1)
,则直接调用
log(x+1)
将导致
x+1-1
,这将删除
x
的所有低阶位,从而在
x
非常小时失去精度。一个内置的
log(x+1)
可以省略这个
x+1-1
步骤并保持完全的精度。@神秘的是,很好的观点!手册中有相当多的提示相信指令使用的是x=1左右的近似值,即使实际的算法没有透露。但是你的措辞很好,因为它关注的是真正的问题:对x=1进行的近似将有一个x-1项,而1>>x意味着精度损失。非常感谢你!顺便问一下,你知道英特尔为什么为
FYL2XP1
选择特定的输入范围吗?@Mystical IIRC,最初的8087带有额外的三位用于内部计算,即总共67个尾数位。如果您需要确定,请查看约翰·F·帕尔默、斯蒂芬·P·莫尔斯的《8087入门》,威利1984。如果y=1,我认为FYL2XP1<1 ulp中的错误。对于AMD Athlon处理器内部的x87 FPU,我们使用了68位内部精度。参见:Stuart F.Oberman,“浮点除法和平方根算法及其在AMD-K7中的实现”™ 微处理器”,载于《第14届IEEE计算机算术研讨会论文集》,第106-115页。IEEE 1999。FYL2XP1<1 ulp中的错误对于任何x,该系列是
log(x+1)=x-x^2/2+x^3/3-x^4/4…
分母是线性的,因此可以忽略不计。
x=1/sqrt(2)
每两个术语将下降2倍。(因为
x^2=1/2
)因此0.5位/项。同样,对于给定的
x
,收敛速度为
-log(| x |)/log(2)
位/项,其中在复平面上
|x |<1
。在这些界限之外,它会发散。@在固定大小的FP算法中,神秘的泰勒展开式很少用于计算超越数。Rafi Nave,“在数字处理器上实现超越函数”,《微处理和微程序设计》11(1983)221-225指出,8087使用CORDIC和有理近似(可能是极大极小类)的组合来计算超越函数。对于Athlon,对于一次近似区间上的log2(1+x),我使用恒等式log(1+x)=2*atanh(x/(x+2)),并使用有理极小极大近似来计算atanh()。只需要很少的术语。为什么要在有关x87 FPU指令的问题上取消标记x87?这是这里最具体、最相关的标签。