我想以可移植的方式使用constexpr版本的标准<cmath>函数,如exp、log、pow。我目前有一个不可移植的解决方案- C++的不兼容扩展,但我关心的是可移植性和未来的防伪(我设想这个扩展可能有一天会从g++中删除)。
我对这些函数的constexpr版本感兴趣,而不是对模板元程序感兴趣--我希望在编译时和运行时都可以使用相同的功能。我不需要C兼容性,但我确实需要快速实现--像Taylor Series扩展这样的简单实现太慢了。
如何实现这些功能?--我对exp、log和pow特别感兴趣
我从我的研究中学到的一些切线相关的东西,
constexpr,因为它们必须有副作用(例如设置errno)才能保持C的兼容性。constexpr,但从C++14开始,这是被禁止的( 这个问题的第一个答案和这个问题的答案)。这也是我担心在未来版本的constexpr中函数可能不是g++的原因之一。g++对每个数学函数foo的实现只是调用一个内置函数__builtin_foo,该函数被视为constexpr。我或许可以开始调用__builtin_foo函数,而不是foo函数--即使相应的foo函数是兼容的,它们在未来的g++版本中可能仍然是constexpr,但这只会有助于将来的防范,而不是可移植性。发布于 2018-11-04 13:29:43
你看过嫩芽的实现吗?
Sprout是只提供基于C++11/14星座的容器、算法、随机数、解析、光线跟踪、合成器等的标头库。
https://github.com/bolero-MURAKAMI/Sprout/tree/master/sprout/math
发布于 2020-10-07 12:22:18
查看提供编译时数学函数的gcem。它们可以像在std中那样被调用,但是使用gcem前缀。
https://stackoverflow.com/questions/50477974
复制相似问题