我对C / C ++中的“ exp”和“ exp2”功能最感兴趣,但是这个问题可能与IEEE 754标准相关,而不是特定的语言功能。

大约十年前,我做了一个家庭作业问题,试图通过所需的循环(C函数)对不同的浮点运算进行排序

double exp2 (double)


似乎比

double exp (double)


鉴于“ double”使用尾数的二进制表示形式,我觉得这个结果是合理的。

但是,今天,在以几种不同方式再次测试了两者之后,我看不到任何可测量的差异。所以我的问题是


(理论上)exp2应该比exp快吗?和
是否应该有可测量的差异?和
近年来答案有变化吗?

最佳答案

许多平台对其数学库不太在意,而exp2(x)只是简单地实现为exp(x * log(2)),反之亦然。这些实现没有提供良好的准确性(或特别是良好的性能),但是它们相当普遍。在执行此操作的平台上,一个功能与另一个功能完全相同,但要付出额外的乘法的代价,而无论哪个获得额外的乘法都会使两者中的较慢者。

在积极调整数学库并尝试提供良好准确性的平台上,这两个函数的性能非常相似。使用exp2生成结果的指数比较容易,但是获得高精度有效值可能需要更多的工作。这两个因素大致相等,以至于性能通常在10-15%的范围内相等。概括地说,exp2通常是两者中最快的一个。

08-16 07:46