我对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
通常是两者中最快的一个。