exp2应该比exp更快吗?

ssq*_*idd 5 math floating-point

我最感兴趣的是C/C++中的"exp"和"exp2"函数,但这个问题可能与IEEE 754标准有关,而不是特定的语言特性.

在我10年前做过的一个家庭作业问题中,它尝试按所需的周期C功能对不同的浮点运算进行排序

double exp2 (double)
Run Code Online (Sandbox Code Playgroud)

似乎比...略快

double exp (double)
Run Code Online (Sandbox Code Playgroud)

鉴于"double"使用尾数的二进制表示,我觉得这个结果是合理的.

然而,今天,在以几种不同的方式再次测试这两种方式之后,我看不出任何可衡量的差异.所以我的问题是

  • exp2(理论上)应该比exp快吗?和
  • 应该有任何可衡量的差异吗?和
  • 近年来答案有所改变吗?

Ste*_*non 7

有许多平台不太关心他们的数学库,exp2(x)只是简单地实现,exp(x * log(2))反之亦然.这些实现不能提供良好的准确性(或特别好的性能),但它们相当普遍.在执行此操作的平台上,一个函数与另一个函数的成本完全相同,但是额外乘法的成本,无论哪个得到额外的乘法将是两者中较慢的.

在积极调整数学库并尝试提供良好准确性的平台上,这两个函数的性能非常相似.生成结果的指数更容易exp2,但获得高精度有效数可能需要稍微多一些工作; 这两个因素大致均匀,即性能通常相当于10-15%.从广义上讲,exp2通常是两者中较快的.