我试图找到更'自然'的方式来使用C/C++中的数字e。我专注于计算函数 e^n。
我认为默认情况下,"cmath"不提供对两者(函数和常量)的支持。但是,可以启用它以包含编译器定义的常量,在本例中为 M_E
。这可以通过包含语句#define _USE_MATH_DEFINES
来完成。
另一方面,e 可以定义为一个常数:
#define E 2.71828182845904523536;
或
const double EULER = 2.71828182845904523536;
说这句话。哪一种是接近这个数学常数的最"标准"方法?是其他图书馆吗?
如果可以避免使用预处理器符号,则应使用。它会在你最意想不到的时候给你带来麻烦。 E
很可能是一个变量。
建议的解决方案:
#include <cmath>
const double EulerConstant = std::exp(1.0);
计算常量而不是分配浮点文本的优点是,它将生成一个精度与特定C++实现的double
数据类型的精度匹配的结果。它消除了因意外跳过数字而引入错误的可能性。
如上图所示,<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;
}
当支持到达 GCC 时,我会尝试一下,GCC 9.1.0 g++-9 -std=c++2a
仍然不支持它。
接受的提案描述了:
5.0. "标题" [标题] 在表 [tab:cpp.library.headers] 中,需要添加新的标头。
[...]
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 变量模板:它们的用途是什么?任何使用示例?
在草案的早期版本中,常量在 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0631r7.pdf std::math::e
:
我也只是面临这个学校问题,并发现我会在没有 cmath 的情况下计算欧拉数。 所以我们需要计算 1 + 1/1!+ 1/2!+ ... + 1/n!
我使用递归函数来实现这样的目的(主要仅用于测试我关于 e 的解决方案):
#include <iostream>
#include <iomanip>
using namespace std;
double Factorial(int n){ // Max n = 170
if(n==1) return 1;
else return n * Factorial(n-1);
}
double GetEuler(int n){
if(n == 0) return 1;
else return (1/Factorial(n) + GetEuler(n-1));
}
int main(){
int n;
double e;
e = GetEuler(170);
cout << setprecision(15) << e << endl;
return 0;
}
输出 : 2.71828182845905