标签: eulers-number

81
推荐指数
3
解决办法
11万
查看次数

如何用C++计算Euler常数或Euler?

我试图找到在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)

说这个.哪一个是接近这个数学常数的最"标准"方法?是其他图书馆吗?

c++ eulers-number

13
推荐指数
2
解决办法
2万
查看次数

使用 Raku 计算 e 数

我试图通过计算公式来计算e常数(又名欧拉数电子

为了一次性计算阶乘和除法,我写了这个:

my @e = 1, { state $a=1; 1 / ($_ * $a++) } ... *;
say reduce  * + * , @e[^10];
Run Code Online (Sandbox Code Playgroud)

但它没有成功。如何正确地做到这一点?

code-generation lazy-evaluation eulers-number raku

9
推荐指数
2
解决办法
347
查看次数

如何将很长的二进制数转换为十进制?

我有一个二进制数表示为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位未经处理的...

vb.net math eulers-number

6
推荐指数
1
解决办法
1078
查看次数

用C++计算欧拉数

编写一个计算欧拉数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)

c++ math eulers-number

3
推荐指数
1
解决办法
6455
查看次数

Haskell/GHC - 有没有办法让 Haskell 只返回小数点后 16 位?

我正在尝试用 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/我的电脑的限制吗?有没有办法找回任意数量的小数位?

precision haskell ghc arbitrary-precision eulers-number

2
推荐指数
1
解决办法
79
查看次数

我试图用C++ for循环计算一定数量,但我一直得到"程序已停止工作"错误消息

我试图在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的

c++ math eulers-number

-1
推荐指数
1
解决办法
94
查看次数

C#承担大量负面没有.作为一个积极的价值

为了切入追逐,当我在我的代码中执行一些计算时,我得到的结果是类似的.7.6742332E-30,我将此值存储在双变量中,例如,double result = 7.6742332E-30;

当我稍后检查该值是否大于0时结果为真,它大于0,我假设由于7.6742332.

所以我的问题是,为什么没有考虑E-30,我该如何解决这个问题呢?

任何建议都会很棒,非常感谢我的进步!

c# double if-statement eulers-number

-2
推荐指数
1
解决办法
98
查看次数