Ton*_*ony 13 c++ eulers-number
我试图找到在C/C++中使用数字e的更"自然"的方法.我专注于计算函数e ^ n.
我认为'cmath',默认情况下,不支持(函数和常量).但是,它可以包含编译器定义的常量,在本例中M_E.这可以通过包含声明来完成#define _USE_MATH_DEFINES.
另一方面,e可以定义为常数:
#define E 2.71828182845904523536;
Run Code Online (Sandbox Code Playgroud)
要么
const double EULER = 2.71828182845904523536;
Run Code Online (Sandbox Code Playgroud)
说这个.哪一个是接近这个数学常数的最"标准"方法?是其他图书馆吗?
IIn*_*ble 19
如果您可以避免使用预处理器符号.当你最不期望它时会给你带来麻烦.E可能会变成一个变量.
建议的解决方案:
#include <cmath>
const double EulerConstant = std::exp(1.0);
Run Code Online (Sandbox Code Playgroud)
计算常量而不是指定浮点字面值的优点是,它将生成一个精度与double特定C++实现的数据类型精度相匹配的结果.并且它消除了意外跳过数字引入错误的可能性.
如上图所示,<cmath>确实声明std::exp,因此您无需自己动手.
C++20 std::numbers::e
C++20 还在e标准库中添加了一个常量:http : //eel.is/c++draft/numbers
我希望用法如下:
#include <math>
#include <iostream>
int main() {
std::cout << std::numbers::e << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
当支持到达 GCC 时,我会尝试一下,GCC 9.1.0g++-9 -std=c++2a仍然不支持它。
接受的提案描述了:
5.0. “headers”[headers]表[tab:cpp.library.headers]中,需要添加一个新的header。
[...]
Run Code Online (Sandbox Code Playgroud)namespace std { namespace math { template<typename T > inline constexpr T e_v = unspecified; inline constexpr double e = e_v<double>;
std::numbers::pi当然还有一个:-)如何在 C++ 中使用 PI 常量
这些常量使用 C++14 变量模板特性:C++14 变量模板:它们的目的是什么?任何使用示例?
在草案的早期版本中,常量位于std::math::e:http : //www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0631r7.pdf
| 归档时间: |
|
| 查看次数: |
20567 次 |
| 最近记录: |