eの近似


21

eで表される、変数xの累乗に対するオイラーの数は、Maclaurin級数展開を使用して近似できることは誰もが知っています。

Maclaurin series expansion of e^x

xを1に等しくすることにより、

Maclaurin series expansion of e

チャレンジ

入力Nを取り込み、N番目の項までの系列を計算することにより、オイラーの数を近似する任意の言語でプログラムを作成します。最初の項の分母は0!であり、1!ではないことに注意してください。つまり、N = 1は1/0!に対応します。

得点

最小バイト数のプログラムが優先されます。


7
N有限精度の浮動小数点数を使用する場合、十分に大きな結果が得られます。その振る舞いは受け入れられますか、または結果がN無限に近づくにつれて徐々に正確になる必要がありますか?
FryAmTheEggman

12
一部のテストケースは適切です。
リン

7
(この種の問題は、できればサンドボックスで解決します。最初に課題を投稿すると、ゴルファーは有益なフィードバックを提供します。)
リン

2
x ^ nはn番目の項ですか(n + 1)番目ですか?
msh210

4
私は個人的にそれを軽deしていますが、インデックス0の用語を0番目の用語と呼ぶ人がいます。その問題に関する私たちの考えとは無関係に、質問は可能な限り明確でなければなりません。また、ソリューションが正しく機能していることを確認するためのいくつかのテストケースが非常に役立ちます。
デニス

回答:


12

ゼリー、5 バイト

R’!İS

オンラインでお試しください!

使い方

R’!İS  Main link. Argument: n

R      Yield the range [1, ..., n].
 ’     Map decrement over the list.
  !    Map factorial over the list.
   İ   Map inverse over the list.
    S  Compute the sum.


6
...と少し後月と、ゼリーは有することができるれ、[0、n)の範囲。^ v ^;
リン

13

Wistful-C -336バイト

私の最初の本当の哀れなプログラム!実際には、最初のゴルフの長さが短くなったため、someday代わりに使用して、少しゴルフをしwait forました。

if only <stdio.h> were included...
if only int f were 1...
if only int N were 0...
wish for "%d",&N upon a star
if only int i were 0...
if only double e were 0...
someday i will be N...
        if only e were e+1./f...
        if only i were i+1...
        if only f were f*i...
*sigh*
wish "%f\n",e upon a star
if wishes were horses...

含める必要はないと言われました<stdio.h>
Leaky Nun

someday i were N...の代わりに仕事をsomeday i will be N...
リーキー修道女


9

TI-84ベーシック、12 15 14

Input N
Σ(A!⁻¹,A,0,N

TIはトークン化された言語です(バイトは個々の文字ではなく、トークンによってカウントされます)。


1
引用されたメタ投稿には、11のアップ投票と10のダウン投票があります。それはコンセンサスではありません。Ans有効な入力形式ではないため、15バイトバージョンのみが有効です。
メゴ

けっこうだ; ...編集
名前のない

1
AnsPPCGでは常にデフォルトの入力形式であり(以前のTIの回答を参照)、反対するよりも同意する人が多いので、答えを変えようとしないでください。
ティムテック

2
@MickLHそれはここでの論争ではありません。また、これらは8ビットバイトです。
ホッブズ

1
@Timtech私はあなたに同意しますが、コミュニティのコンセンサスはMegoが言うように定義されています。
コナーオブライエン

9

ジュリア、28 27 21バイト

n->sum(1./gamma(1:n))

これは、整数を受け入れ、floatを返す匿名関数です。呼び出すには、変数に割り当てます。

アプローチは非常に簡単です。我々はsum1を介して1のそれぞれで評価ガンマ関数で割ったN。これは、プロパティnを利用します!=Γ(n +1)。

オンラインでお試しください!

デニスのおかげで1バイト、グレンO!のおかげで6バイト節約できました。


MATLABでもほぼ同じです@(n)sum(1./factorial(0:n))
。– flawr

6

Python、36バイト

Python 2:

f=lambda n,i=1:n/i and 1.+f(n,i+1)/i

Python 3:

f=lambda n,i=1:i<=n and 1+f(n,i+1)/i

Python 3バリアントは、次のor代わりに短くなる可能性がありandますf=lambda n,i=1:i>=n or 1+f(n,i+1)/i
コンストラクター

6

dc、43バイト

[d1-d1<f*]sf[dlfx1r/r1-d1<e+]se1?dk1-d1<e+p

これは、シリーズのかなり直接的な翻訳です。私は賢くなろうとしましたが、それはより長いコードをもたらしました。

説明

[d1-d1<f*]sf

n> 0の単純な階乗関数

[dlfx1r/r1-d1<e+]se

n、...、1の階乗を実行します。反転して合計

1?dk1-

1でスタックをプライミングします。入力を受け入れ、適切な精度を設定する

d1<e+

入力が0または1の場合、そのまま渡すことができます。そうでない場合は、部分合計を計算します。

p

結果を印刷します。

試験結果

最初の100の拡張:

0
1
2
2.500
2.6666
2.70832
2.716665
2.7180553
2.71825394
2.718278766
2.7182815251
2.71828180110
2.718281826194
2.7182818282857
2.71828182844671
2.718281828458223
2.7182818284589936
2.71828182845904216
2.718281828459045062
2.7182818284590452257
2.71828182845904523484
2.718281828459045235331
2.7182818284590452353584
2.71828182845904523536012
2.718281828459045235360273
2.7182818284590452353602862
2.71828182845904523536028736
2.718281828459045235360287457
2.7182818284590452353602874700
2.71828182845904523536028747123
2.718281828459045235360287471339
2.7182818284590452353602874713514
2.71828182845904523536028747135253
2.718281828459045235360287471352649
2.7182818284590452353602874713526606
2.71828182845904523536028747135266232
2.718281828459045235360287471352662481
2.7182818284590452353602874713526624964
2.71828182845904523536028747135266249759
2.718281828459045235360287471352662497738
2.7182818284590452353602874713526624977552
2.71828182845904523536028747135266249775705
2.718281828459045235360287471352662497757231
2.7182818284590452353602874713526624977572453
2.71828182845904523536028747135266249775724691
2.718281828459045235360287471352662497757247074
2.7182818284590452353602874713526624977572470919
2.71828182845904523536028747135266249775724709352
2.718281828459045235360287471352662497757247093683
2.7182818284590452353602874713526624977572470936984
2.71828182845904523536028747135266249775724709369978
2.718281828459045235360287471352662497757247093699940
2.7182818284590452353602874713526624977572470936999574
2.71828182845904523536028747135266249775724709369995936
2.718281828459045235360287471352662497757247093699959554
2.7182818284590452353602874713526624977572470936999595729
2.71828182845904523536028747135266249775724709369995957475
2.718281828459045235360287471352662497757247093699959574944
2.7182818284590452353602874713526624977572470936999595749646
2.71828182845904523536028747135266249775724709369995957496673
2.718281828459045235360287471352662497757247093699959574966943
2.7182818284590452353602874713526624977572470936999595749669652
2.71828182845904523536028747135266249775724709369995957496696740
2.718281828459045235360287471352662497757247093699959574966967601
2.7182818284590452353602874713526624977572470936999595749669676254
2.71828182845904523536028747135266249775724709369995957496696762747
2.718281828459045235360287471352662497757247093699959574966967627699
2.7182818284590452353602874713526624977572470936999595749669676277220
2.71828182845904523536028747135266249775724709369995957496696762772386
2.718281828459045235360287471352662497757247093699959574966967627724050
2.7182818284590452353602874713526624977572470936999595749669676277240739
2.71828182845904523536028747135266249775724709369995957496696762772407632
2.718281828459045235360287471352662497757247093699959574966967627724076601
2.7182818284590452353602874713526624977572470936999595749669676277240766277
2.71828182845904523536028747135266249775724709369995957496696762772407663006
2.718281828459045235360287471352662497757247093699959574966967627724076630325
2.7182818284590452353602874713526624977572470936999595749669676277240766303508
2.71828182845904523536028747135266249775724709369995957496696762772407663035328
2.718281828459045235360287471352662497757247093699959574966967627724076630353518
2.7182818284590452353602874713526624977572470936999595749669676277240766303535449
2.71828182845904523536028747135266249775724709369995957496696762772407663035354729
2.718281828459045235360287471352662497757247093699959574966967627724076630353547565
2.7182818284590452353602874713526624977572470936999595749669676277240766303535475915
2.71828182845904523536028747135266249775724709369995957496696762772407663035354759429
2.718281828459045235360287471352662497757247093699959574966967627724076630353547594542
2.7182818284590452353602874713526624977572470936999595749669676277240766303535475945681
2.71828182845904523536028747135266249775724709369995957496696762772407663035354759457111
2.718281828459045235360287471352662497757247093699959574966967627724076630353547594571352
2.7182818284590452353602874713526624977572470936999595749669676277240766303535475945713792
2.71828182845904523536028747135266249775724709369995957496696762772407663035354759457138185
2.718281828459045235360287471352662497757247093699959574966967627724076630353547594571382143
2.7182818284590452353602874713526624977572470936999595749669676277240766303535475945713821752
2.71828182845904523536028747135266249775724709369995957496696762772407663035354759457138217826
2.718281828459045235360287471352662497757247093699959574966967627724076630353547594571382178492
2.7182818284590452353602874713526624977572470936999595749669676277240766303535475945713821785218
2.71828182845904523536028747135266249775724709369995957496696762772407663035354759457138217852481
2.718281828459045235360287471352662497757247093699959574966967627724076630353547594571382178525131
2.7182818284590452353602874713526624977572470936999595749669676277240766303535475945713821785251635
2.71828182845904523536028747135266249775724709369995957496696762772407663035354759457138217852516607
2.718281828459045235360287471352662497757247093699959574966967627724076630353547594571382178525166394

1000用語を使用する:

2.7182818284590452353602874713526624977572470936999595749669676277240\
766303535475945713821785251664274274663919320030599218174135966290435\
729003342952605956307381323286279434907632338298807531952510190115738\
341879307021540891499348841675092447614606680822648001684774118537423\
454424371075390777449920695517027618386062613313845830007520449338265\
602976067371132007093287091274437470472306969772093101416928368190255\
151086574637721112523897844250569536967707854499699679468644549059879\
316368892300987931277361782154249992295763514822082698951936680331825\
288693984964651058209392398294887933203625094431173012381970684161403\
970198376793206832823764648042953118023287825098194558153017567173613\
320698112509961818815930416903515988885193458072738667385894228792284\
998920868058257492796104841984443634632449684875602336248270419786232\
090021609902353043699418491463140934317381436405462531520961836908887\
070167683964243781405927145635490613031072085103837505101157477041718\
986106873969655212671546889570350116

5

J、10バイト

[:+/%@!@i.

簡単なアプローチ。

説明

[:+/%@!@i.    Input: n
        i.    Creates the range [0, 1, ..., n-1]
      !@      Maps factorial to each
    %@        Map 1/x to each
[:+/          Take the sum of the values and return it

いいね 些細な1バイトの改善:1#.%@!@i.
Jonah

4

CJam、11

r~,:m!Wf#:+

または

r~{m!W#}%:+

オンラインで試す:最初のバージョン2番目のバージョン

説明:

r~=読み取りと評価
m!=階乗
W#= -1乗(W= -1)
:+=配列の合計
最初のバージョンは[0…N-1]配列を構築し、すべての要素に階乗と逆を適用します。2番目のバージョンでは、各数値に対して階乗と逆を行い、それらを配列に入れます。


4

JavaScript ES6、44 42 40

n=>{for(k=s=m=1;m<n;s+=k/=m++);return s}

名前のない関数。

2バイトの@AlexAを保存してくれてありがとう、さらに2バイトの@LeakyNunに感謝します!


n=>{for(k=s=m=1;m<n;s+=k/=m++);return s}
リーキー修道女

4

MATL、11 7バイト

:Ygl_^s

@Luisの使用推奨gammaYg)のおかげで4バイト節約

オンラインで試す

説明

        % Implicitly grab input (N)
:       % Create an array from 1...N
Yg      % Compute factorial(x-1) for each element (x) in the array
l_^     % Take the inverse
s       % Sum all elements
        % Implicitly display the result

削除できます]
ルイスメンドー

また、1i:Yg/s7バイト
ルイスメンドー

@LuisMendo oh yea階乗を得るより良い方法があることを望んでいましたが、ガンマについては忘れていました。間もなく更新
-Suever

4

MATL、6バイト

q_t1Zh

これは、超幾何関数 1 F 1a ; b ; z)を使用して合計を計算します。

enter image description here

Octaveとオンラインコンパイラで動作しますが、Matlabでは動作しません。これは、超幾何関数の定義方法の違い(修正予定)のためです。

オンラインでお試しください!

説明

q_    % Take N implicitly. Compute -N+1
t     % Duplicate
1     % Push 1
Zh    % Hypergeometric function 1F1(-N+1;-N+1;1). Implicitly display

4

C、249バイト

#include <stdio.h>
#include <stdlib.h>
#define z double
z f(z x){z r=1;z n=1;while(x>0){r*=n;n++;x--;}return r;}int main(int argc, char **argv){z e=0;z p=0;z d=0;p=strtod(argv[1],NULL);while(p>0){e+=1.0d/f(d);printf("%.10f\n",e);p--;d++;}return 0;}

ゴルフをしていない:

/* approximate e */

#include <stdio.h>
#include <stdlib.h>

double fact(double x){
    double result = 1;
    double num = 1;

    while (x > 0){
        result *= num;
        num++;
        x--;
    }
    return result;
}

int main(int argc, char **argv){
    double e = 0;
    double precision = 0;
    double denom = 0;

    precision = strtod(argv[1], NULL);
    while (precision > 0){
        e += 1.0d / fact(denom);
        printf("%.10f\n", e);
        precision--;
        denom++;
    }
    return 0;
}

反復回数を決定するための引数として数値を取ります。


こんにちは、PPCGへようこそ!素晴らしい最初の投稿!
-NoOneIsHere

プログラミングパズルとコードゴルフへようこそ!このプログラムは最後の近似値のみを印刷するためのものだと思います。少なくともGCCでは、int以前mainとが必要ありませんreturn 0。あなたが交換した場合も、NULL0、あなたは、必要ありません。argcまたargv、1文字の変数に短縮できます。Cでゴルフを楽しむなら、Cでのゴルフのヒントが役立つかもしれません。
デニス

私見では、たとえコンパイラが警告をスローしても正しい結果を返したとしても、エラーなしでは何も削減できないほどコードの多くの部分を捨てることができます。
アンドレイKostyrka 16

そして、あなたは必要ありません#include <stdio.h>
リーキー修道女

3

k(13バイト)

オーバーフローの対象 N>20

{+/%*\1,1+!x}

3

05AB1E、6バイト

$L<!/O

説明した

$           # push 1 and input: N = 5
 L<         # range [0..N-1]: [0,1,2,3,4]
   !        # factorial over range [1,1,2,6,24]
    /       # divide 1/range: [1.0, 1.0, 0.5, 0.16666666666666666, 0.041666666666666664]
     O      # sum: 2.708333333333333

オンラインで試す


1
で5バイトL<!zO
グリムミー

3

パイク、10バイト

FSBQi^R/)s

ここで試してみてください!

またはpower = 1の場合は8バイト

FSB1R/)s

ここで試してみてください!


最初のコードは、実行したときに3つ以上オフでした:5.436532738095238
tox123

@ tox123は現在修正済み
ブルー

これらをテストしていますか?私は得た:7.3887125220458545最初のため、2番目ははるかによく働きます。
tox123

それは、eだけではないe ^ xの1つです
ブルー

それは挑戦ではありません。
tox123


3

Dyalog APL、6 バイト

+/÷!⍳⎕

+/0から数値入力までの数値の階乗の
÷逆数の合計
!

を想定し⎕IO←0ます。これは多くのシステムでデフォルトです。

TryAPL


3

Haskell、37バイト

((scanl(+)0$(1/)<$>scanl(*)1[1..])!!)

最短ではありませんが、間違いなく一番きれいです。


またの礼儀Laikoni、ここにあるソリューションである2バイトを短くは:

sum.(`take`((1/)<$>scanl(*)1[1..]))

λ> let f = ((scanl (+) 0 $ (1/) <$> scanl (*) 1 [1..]) !!)

λ> map f [1..5]
[1.0,2.0,2.5,2.6666666666666665,2.708333333333333]

λ> f 10
2.7182815255731922

λ> f 100
2.7182818284590455

λ> log (f 10)
0.9999998885745155

λ> log (f 100)
1.0

2
このUTF-8バイトカウンターを使用できます。バイトカウントを追加するために、提案された編集を行いました50。ヘッダーを追加するには、次を使用します## Language, <xxx> bytes
-NoOneIsHere

1
空白が必要ですか?
-NoOneIsHere

1
入力が変数に存在するとは想定できないため、先頭に追加するf n=\n->、有効な関数サブミットを取得する必要があります。しかし、我々はまた、いくつかのバイトを保存することができます:(\x->1/x)セクションに短縮することができ(1/)[1,2..]同じである[1..]map(...)$することができ(...)<$>。Together 36バイト:オンラインでお試しください!
ライコニ

1
ポイントフリー関数に変換すると、もう1バイト節約できます。オンラインで試してください!また、1バイト長くなりますが、((scanl(+)0$(1/)<$>scanl(*)1[1..])!!)見た目もきれいです。
ライコニ

1
かっこなしのバージョンは、値を挿入するときに有効なHaskell式にすぎませんが定義済み変数に入力が存在することは許可されていないこと前提として、かっこを追加するか\n->、作成するリード機能。
ライコニ

3

APL(Dyalog Unicode)、5バイト

⍳⊥⊢÷!

オンラインでお試しください!

別の挑戦の私の答えにある混合ベーストリックを使用します。を使用します。⎕IO←0

使い方

⍳⊥⊢÷!  Right argument: n, the number of terms
  ⊢÷!  v: 1÷(n-1)!
      B: The array of 0 .. n-1
      Expand v to length-n array V,
       then mixed base conversion of V in base B

Base | Digit | Value
--------------------
0    | v     | v×(1×2×..×(n-1)) = 1÷0!
1    | v     | v×(2×3×..×(n-1)) = 1÷1!
2    | v     | v×(3×..×(n-1))   = 1÷2!
..   | ..    | ..
n-2  | v     | v×(n-1)          = 1÷(n-2)!
n-1  | v     | v                = 1÷(n-1)!

10k担当者!私はチューリングマシンでこのオフを引っ張ることができるかどうか、今....確認します
ouflak

いい答えです1÷(n-1)!が、数字がどのように表示されるかわかりません。明確にするためにそれをJに翻訳してもらえますか?
ヨナ


2

Brachylog、18バイト

:1-:0r:ef:$!a:/a+.

説明

:1-                 Subtract 1 from Input
   :0r              Create the list [0, Input - 1]
      :ef           Find all integers between 0 and Input - 1
         :$!a       Apply factorial to each member of that list
             :/a    Apply inverse to each element of that list
                +.  Unify the output with the sum of the list

2

Maple, 18

add(1/i!,i=0..n-1)

Usage:

> f:=n->add(1/i!,i=0..n-1);
> f(1);
  1
> f(4);
  8/3

I think the function is n->add(1/i!,i=0..n-1)
RosLuP


2

Java with Ten Foot Laser Pole, 238 236 bytes

import sj224.tflp.math.*;interface U{static void main(String[]a){BigRational r=null,s,t;r=s=t=r.ONE;for(int n=new java.util.Scanner(System.in).nextInt()-1;n-->0;){t=t.multiply(r);s=s.add(t.pow(-1));r=r.add(r.ONE);}System.out.print(s);}}

Has much better overflow resistance than most of the other answers. For 100 terms, the result is

31710869445015912176908843526535027555643447320787267779096898248431156738548305814867560678144006224158425966541000436701189187481211772088720561290395499/11665776930493019085212404857033337561339496033047702683574120486902199999153739451117682997019564785781712240103402969781398151364608000000000000000000000

2

Julia, 28 bytes

~k=k<1?1:1/gamma(k+1)+~(k-1)

Explanation

~k=                    #Define ~ to be
    k<1                #If k is less than 1
        ?1             #to be one
        :1/gamma(k+1)  #else add the reciprocal factorial to 
            +~(k-1)    #the function applied to the predecessor value

gamma(k+1) is equal to factorial(k) for positive integer inputs, and generalizes it for all values other than the nonnegative integers. It saves one byte, so why not use it?


1

MATLAB / Octave, 22 bytes

@(x)sum(1./gamma(1:x))

Creates an anonymous function named ans that can be called using ans(N).

This solution computes gamma(x) for each element in the array [1 ... N] which is equal to factorial(x-1). We then take the inverse of each element and sum all elements.

Online Demo


1

Perl 5, 37 bytes

Not a winner, but nice and straightforward:

$e=$p=1;$e+=1/($p*=$_)for 1..<>;say$e

Outputs for inputs from 0 to 10:

1
2
2.5
2.66666666666667
2.70833333333333
2.71666666666667
2.71805555555556
2.71825396825397
2.71827876984127
2.71828152557319
2.71828180114638

1

R, 17 bytes

sum(1/gamma(1:n))

Quite straightforward, although numerical precision issues are bound to arise at some point in time.


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.