用查找表替换math.h exp调用

时间:2018-04-10 20:14:45

标签: c++ math.h

我想知道修改代码以使用math.h exp的查找表是否有任何意义,或者在clang++给出-O3时是否由#pragma自动完成旗。

如果不是,是否有exp(-a*x)这样做?

澄清

我在谈论函数调用的memoisation。也就是说,如果函数传递了相同的精确参数(是的,浮点数实际上可以是相同的,如果它们是从常量和整数派生的)。

示例

假设我要运行a,其中x不是编译时常量,但一旦设置一次,它就不会被修改。类似地,class Pet : def main() : print(getName()) print(getSpecies()) print(getAge()) def getName(self) : name = str(input("What is your pets name: ")) return name def getSpecies(self) : species = str(input("What is your pets species: ")) return species def getAge(self) : age = int(input("Please type in your age: ")) return print(age) main() 可以是10个可能值中的一个,所有值都设置一次,而不是再次修改。

1 个答案:

答案 0 :(得分:2)

我对clang细节知之甚少,所以我无法详细说明它的作用。但我可以推断它可以做什么。

如果参数是编译时常量,那么优化器可能能够在编译/链接时预先计算。但这绝不是必须的,我不希望所有的编译器都这样做。

如果参数不是编译时常量,并且同一函数内的多个调用使用相同的参数(并且没有涉及易失性对象),那么优化器可能会重新使用结果,如果它知道函数不有副作用。这个优化我建议你手动完成,因为最好不要重复自己。

如果参数不是编译时常量,那么你可以将结果存储在某个地方稍后要使用的表中,但是加载该值的内存访问可能比进行计算本身慢得多,所以这可能会结束是一种悲观情绪。

显然,进行任何这些优化是否有任何意义,取决于许多方面,例如CPU架构,缓存等,最重要的是首先考虑操作是否对性能有任何重大影响。 / p>