我试图找到在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)
说这个.哪一个是接近这个数学常数的最"标准"方法?是其他图书馆吗?
我试图通过计算公式来计算e常数(又名欧拉数)
为了一次性计算阶乘和除法,我写了这个:
my @e = 1, { state $a=1; 1 / ($_ * $a++) } ... *;
say reduce * + * , @e[^10];
Run Code Online (Sandbox Code Playgroud)
但它没有成功。如何正确地做到这一点?
我有一个二进制数表示为11.1111111(.类似于小数点).在该点之前有2位,在该点之后有1024位.这是一个计算e到高精度的练习,但现在我被困在如何将它转换为十进制.万一你想知道这个数字,这里是:
10.1011011111100001010100010110001010001010111011010010101001101010101111110111000101011000100000001001110011110100111100111100011101100010111001110001011000001111001110001011010011011010010101101010011110000100110110010000010001010001100100001100111111101111001100100100111001110111001110001001001001101100111110111110010111110100101111111000110110001101100011000011000111010111011000111101101000000110110010000000101010111011000100011000010111101011010011110111110001111011010101110101011111110101100101011000010010010000110011111101010001111101011111000001100110111011010000100001010110001101100101010101010011110111101101000110101111001110110101010101110001001101011110011111110101011111001001001101011001100001001111000011000111000011100000111001101000101101110111111000101010011010001001110110101111001111101111111010000111001000011101111100010101100010100001001101101010110111100111001101010011000010101100110010100100111101001000001110100111100101111010101111000000101010110001100000101011001100100100111110110011101011
Run Code Online (Sandbox Code Playgroud)
如何将其转换为2.718 ....(小数点后应该有大约309位)我不能简单地将每个位乘以2 ^ x,因为过了一会儿,数字2 ^ x将= 0,甚至当使用双精度浮子时.我使用的是Visual Basic,所以我不确定是否存在更大的变量.
[由Spektre编辑]
只需用我的代码运行你的字符串(根据我的评论中的链接),结果是:
e(bigdecimal)=2.71828182845904523536028747135266249775724709369995957496696762772407663035354759457138217852516642742746639193200305992181741359662904357290033429526059563073813232862794349076323382988075319525101901157383418793070215408914993488416750924476146066808226480016847741185374234544243710753907774499206955170189257927265177296267786175561825444670874889747782175809270565601486538810885558129926100522647929865142359038501319247028975364903531383896590857864585070203793060262761378008328322397393650711101939331201
e (text)=2.71828182845904523536028747135266249775724709369995957496696762772407663035354759457138217852516642742746639193200305992181741359662904357290033429526059563073813232862794349076323382988075319525101901157383418793070215408914993488416750924476146066808226480016847741185374234544243710753907774499206955170189
e (reference)=2.718281828459045235360287471352662497757247093699959574966967627724076630353547594571382178525166427427466391932003059921817413596629043572900334295260595630738132328627943490763233829880753195251019011573834187930702154089149934884167509244761460668082264800168477411853742345442437107539077744992069551702761838606261331384583000752044933826560297606737113200709328709127443747047230696977209310141692836819025515108657463772111252389784425056953696770785449969967946864454905987931636889230098793127736178215424999229576351482208269895193668033182528869398496465105820939239829488793320362509443117301238197068416140397019837679320683282376464804295311802328782509819455815301756717361332069811250996181881593041690351598888519345807273866738589422879228499892086805825749279610484198444363463244968487560233624827041978623209002160990235304369941849146314093431738143640546253152096183690888707016768396424378140592714563549061303107208510383750510115747704171898610687396965521267154688957035035402123407849819334321068170121005627880235193033224745015853904730419957777093503660416997329725088687696640355570716226844716256079882651787134195124665201030592123667719432527867539855894489697096409754591856956380236370162112047742722836489613422516445078182442352948636372141740238893441247963574370263755294448337998016125492278509257782562092622648326277933386566481627725164019105900491644998289315056604725802778631864155195653244258698294695930801915298721172556347546396447910145904090586298496791287406870504895858671747985466775757320568128845920541334053922000113786300945560688166740016984205580403363795376452030402432256613527836951177883863874439662532249850654995886234281899707733276171783928034946501434558897071942586398772754710962953741521115136835062752602326484728703920764310059584116612054529703023647254929666938115137322753645098889031360205724817658511806303644281231496550704751025446501172721155519486685080036853228183152196003735625279449515828418829478761085263981395599006737648292244375287184624578036192981971399147564488262603903381441823262515097482798777996437308997038886778227138360577297882412561190717663946507063304527954661855096666185664709711344474016070462621568071748187784437143698821855967095910259686200235371858874856965220005031173439207321139080329363447972735595527734907178379342163701205005451326383544000186323991490705479778056697853358048966906295119432473099587655236812859041383241160722602998330535370876138939639177957454016137223618789365260538155841587186925538606164779834025435128
Run Code Online (Sandbox Code Playgroud)
第一个是从文本转换为我的arbnum数据类型,然后转换回文本,中间是纯文本到文本转换(如在转换为十六进制之前的链接),最后是引用e
这里是二进制字符串的十六进制字符串:
e (hex) =2.B7E151628AED2A6ABF7158809CF4F3C762E7160F38B4DA56A784D9045190CFEF324E7738926CFBE5F4BF8D8D8C31D763DA06C80ABB1185EB4F7C7B5757F5958490CFD47D7C19BB42158D9554F7B46BCED55C4D79FD5F24D6613C31C3839A2DDF8A9A276BCFBFA1C877C56284DAB79CD4C2B3293D20E9E5EAF02AC60ACC93ECEBh
Run Code Online (Sandbox Code Playgroud)
我截断了十进制半字节大小,所以最后可能会留下1,2或3位未经处理的...
编写一个计算欧拉数e的程序.为此,首先编写一个带参数n的函数,然后返回结果(1 + 1/n)n.当n接近无穷大时,该函数的极限接近e.在您的主程序中,编写一个循环,使用增加的n值调用此函数.在每次迭代中,将n乘以2(如果您每次只加1到n,算法就会"工作"),并在新近似值与之前的近似值相差小于1e-8时停止.现在你有一个很好的估计.所以在main()中,打印出最佳近似值和生成它的数字n.
我做了一切,直到for循环.我不太明白在新的和之前的数字大致相同之后我应该如何停止for循环.
这是我的功能:
double euler_finder(double n)
{
return pow((1+1/n), n);
}
Run Code Online (Sandbox Code Playgroud)
这是我在主方法中的for循环,其中??? 是我遇到问题的地方:
for (int i=0; i<????; i*=2) {
}
Run Code Online (Sandbox Code Playgroud)
编辑:解决方案已发布,所以在这里看起来像:
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
double euler(int n);
int main()
{
int trialN = 4;
double guess1, guess2;
guess1 = euler(1);
guess2 = euler(2);
while( abs(guess1-guess2) > 1e-8 )
{
cout<< trialN << " " << guess2<<endl;
guess1 = guess2;
guess2 = euler( trialN );
trialN*=2;
}
cout<<setprecision(8)<<"e is approximately "<<guess2<<" …Run Code Online (Sandbox Code Playgroud) 我正在尝试用 Haskell 编写一个程序,将 ' e'(欧拉数)返回到给定的小数位。到目前为止,这是我的代码:
factorial 0 = 1
factorial n = n * factorial (n - 1)
calculateE a
| a == 0 = 1
| otherwise = nextLevel
where nextLevel = (1 / (factorial a)) + calculateE (a-1)
Run Code Online (Sandbox Code Playgroud)
每当我打电话时,calculateE我只能返回小数点后 16 位。这是 Haskell/我的电脑的限制吗?有没有办法找回任意数量的小数位?
我试图在Dev C++中运行此代码:
#include<conio.h>
#include<iostream>
using namespace std;
int main()
{
float sum =1;
int num = -1;
for(int i=1; i<=1000; i++)
{
num *= i;
sum += 1/(num);
}
cout<<sum<<endl;
getch();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
每当我编译并运行代码时,我都会收到程序已停止工作的Windows错误消息.有人可以帮帮我吗?
使用此代码,我试图计算以下总和:
∞
Σ1/ n!
n = 0的
为了切入追逐,当我在我的代码中执行一些计算时,我得到的结果是类似的.7.6742332E-30,我将此值存储在双变量中,例如,double result = 7.6742332E-30;
当我稍后检查该值是否大于0时结果为真,它大于0,我假设由于7.6742332.
所以我的问题是,为什么没有考虑E-30,我该如何解决这个问题呢?
任何建议都会很棒,非常感谢我的进步!