看到 Todd Veldhuizen 的元编程指南中的最后一个示例给我留下了深刻的印象,其中 trig 函数类似于sin
并cos
在编译时预先计算。老实说,这让我大吃一惊,如果您编写的代码像我一样在循环中执行大量此类操作,那么这可能会对提高性能产生重大影响。
问题 1
然而,这让我想知道在什么可用作运行时工具(调用实际的数学库函数,如sin
or cos
)与仅可用作编译时数学运算符之间的界限在哪里。
Todd 的示例需要仅使用普通算术手动计算三角函数。
我是否应该假设编译器能够处理所有普通的数学函数*
+
-
/
,但没有别的?
问题2
在这种情况下,您只能获得整数的编译时结果sin
和计算,对吗?cos
也就是说,您不能预编译类似的结果,对sin 45.5
吗?
或者,如果模板只能接受整数作为参数,您可以在类中获取多个整数并将它们组合float
在一起,例如传递1
2
3
和制作浮点值。1.23
sin