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++fooyum*_*odo 12
你看过Sprout的实现吗?
Sprout 是仅标头库,提供基于 C++11/14 constexpr 的容器、算法、随机数、解析、光线追踪、合成器等。
https://github.com/bolero-MURAKAMI/Sprout/tree/master/sprout/math
| 归档时间: |
|
| 查看次数: |
3374 次 |
| 最近记录: |