我刚刚实现(再次)一个递归模板,用于在编译时计算整数的阶乘(谁会想到有一天我实际上会需要它!)。不过,我没有自己动手,而是去了Boost http://www.boost.org/寻找答案。然而,特殊数学中的阶乘函数明确禁止将其与整数类型一起使用,所以我只是编写了自己的函数。
不过,Boost 中还有其他我应该使用的函数吗?我应该将整数转换为double
并使用boost::factorial
功能?计算是在编译时执行的吗?
你不需要 Boost,如果你有 C++11,这只是 1 行代码:
constexpr uint64_t factorial(uint64_t n) {
return n == 0 ? 1 : n * factorial(n-1);
}
即使您的 arg 也不是编译时间常量,它也会起作用。 uint64_t 适用于 n
如果您在编译时执行此操作并与浮点值相乘 - 将不会有转换开销(转换也将在编译时进行)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)