use*_*176 18 c++ language-lawyer constexpr c++11
我想使用constexpr
的标准版<cmath>
一样的功能exp
,log
,pow
在便携方式.我目前有一个非便携式解决方案g++
将这些功能视为constexpr
- 不兼容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
函数 - 即使相应的函数符合要求,这些函数仍可能保留constexpr
在未来版本中- 但这只会有助于未来验证,而不是可移植性.g++
foo
yum*_*odo 12
你看过Sprout的实现吗?
Sprout 是仅标头库,提供基于 C++11/14 constexpr 的容器、算法、随机数、解析、光线追踪、合成器等。
https://github.com/bolero-MURAKAMI/Sprout/tree/master/sprout/math
归档时间: |
|
查看次数: |
3374 次 |
最近记录: |