Compute the first N digits of e

Challenge

Write a program to compute the the first N (<= 10^3) digits of e.

Your program should take an integer N as input.

Input:

100


Output:

2.718281828459045235360287471352662497757247093699959574966967627724076630353547594571382178525166427


Input:

7


Output:

2.718282


Input:

1000


Output:

2.718281828459045235360287471352662497757247093699959574966967627724076630353547594571382178525166427427466391932003059921817413596629043572900334295260595630738132328627943490763233829880753195251019011573834187930702154089149934884167509244761460668082264800168477411853742345442437107539077744992069551702761838606261331384583000752044933826560297606737113200709328709127443747047230696977209310141692836819025515108657463772111252389784425056953696770785449969967946864454905987931636889230098793127736178215424999229576351482208269895193668033182528869398496465105820939239829488793320362509443117301238197068416140397019837679320683282376464804295311802328782509819455815301756717361332069811250996181881593041690351598888519345807273866738589422879228499892086805825749279610484198444363463244968487560233624827041978623209002160990235304369941849146314093431738143640546253152096183690888707016768396424378140592714563549061303107208510383750510115747704171898610687396965521267154688957035035


Shortest solution wins!

Mathematica (12 bytes)

N[E,Input[]]

• You can try it online: there is a e-digits command on yubnub.org e.g., yubnub.org/parser/parse?command=e-digits+1000 that uses wolframalpha wolframalpha.com/input/…
– jfs
Commented Mar 13, 2011 at 10:09
• -1 because you do not implement the calculation by your self. Commented Mar 14, 2011 at 14:13
• @FUZxxl:The author didn't asked for an implementation,only shortest ones is preferred. Commented Mar 22, 2011 at 0:34
• @Quixotic The question does say "compute" not just output. Would you have argued the same thing if the question had said "calculate" instead of "compute"? Commented Feb 2, 2014 at 20:44

Python, 69

e=f=n=1;N=input()+2;exec"e+=10**N/f;f*=n;n+=1;"*N;print'2.'+e[1:-4]

Computes N+2 iterations of the standard power series for e.

Python, 67

import decimal as d
d.getcontext().prec=input()
print d._One.exp()

• Save 3 chars? from decimal import* and remove both d. Commented Feb 2, 2014 at 22:16
• @Timtech import * won't import _One due to the leading underscore.
– jfs
Commented Apr 24, 2016 at 10:24
• Okay, didn't know that, sorry/ Commented Apr 24, 2016 at 13:44

J, 20...ish.

Computational, but... Very inefficient. With n defined (20):

(0 j.<:n)":+/%!i.x:n+9


ge =. 3 : '(0 j.<:y)":+/%!i.x:y+9'


As a tacit function (33, fixed):

(0 j.<:)":(+/)&:(%&!&i.&x:&(9&+))

• This converges very fast (for 100 digits you need "just" 70 terms) so you can drop that +9. Commented Mar 13, 2011 at 10:05
• For 1000 digits this: (0 j.<:1000)":+/%!i.x:450 takes just a few seconds. Commented Mar 13, 2011 at 10:09
• Would you care to explain your code? Commented Mar 13, 2011 at 14:49
• @Eelvex: But I need extra terms up until N=30 or so. (Any hints on reducing that mess of composes, or is that about right?) Commented Mar 13, 2011 at 18:04
• Ah, you're right, that's unfortunate. (That "mess" is shorter than anything else I could come up with - unless, off course, you use a fixed number for i. like: (0 j.<:n)":+/%!i.999x; then tacitly:(+/%!i.999x)":~0 j.<: ) Commented Mar 13, 2011 at 18:20

05AB1E, 43 2 bytes

Crossed out 4 is still regular 4 ;(

Thanks to @Adnan for a byte.

žt


Uses CP-1252 encoding.

Explanation:

žt - Push input. Pop a, push e to a places (up to 10000).


Update:

Remove I, as žt takes input anyway if none is on the stack.

• Welcome to Programming Puzzles and Code Golf! The ž character is 1 byte in the CP-1252 encoding, so this has a total score of 2 bytes instead of 3 :p. Commented May 2, 2016 at 17:46
• @Adnan Thanks! Nice language, btw.
– user53406
Commented May 2, 2016 at 17:47
• @GeorgeGibson Thank you! :) Commented May 2, 2016 at 17:47

Ruby, 68

require 'bigdecimal/math';include BigMath;puts E(gets.to_i).to_s 'F'

• it doesn't work on ruby1.8. It produces invalid results on ruby1.9
– jfs
Commented Mar 13, 2011 at 9:57
• You're right, but it should work in Ruby 1.9. There seems to be something wrong with precision in the E function. Commented Mar 13, 2011 at 10:48
• Looks fine here, it just adds some imprecise digits. Mayby like this? require'bigdecimal/math';puts BigMath::E(a=gets.to_i).to_s(?F)[0,a+1] Commented Mar 13, 2011 at 22:48

GolfScript 43 41

~10\?1:b 461,{)b*:b@+\}460*;*b/);(;'2.'\


Edit: I might as well replace the 0 with the leftover 1 from initializing b, the resulting difference is far too small to make it to the output.

I left the old version as that is what I have documented below.

~10\?1:b;0 461,{)b*:b@+\}460*;*b/);(;'2.'\


~10\? Take input and calculate 10^input, leave the result on the stack.
1:b; Store 1 in b.
0 461, Put 0 on the stack, put the array [0 1 ... 459 460] on the stack.
{ }460* Execute function 460 times.
)b*:b Take the last element of the array, multiply it by b, store result in b and leave the result on the stack.
@+\ Switch the 0 (which is only a zero at the first iteration) to the top of the stack, add it to the leftover b value, and switch the result back again.
; Remove the rest of the array (only [0] is left).
The number that was initialized to 0 now hold the value e*460! and b hold 460!
* Multiply 10^input by e*460! (they are at this point the only 2 elements left on the stack).
b/ Divide the result by b.
The stack now hold the value e*10^input which when converted to a string will hold all the decimals, but not the dot.
);(;'2.'\ A bunch of string operations to fit in the dot.

e*460! is calculated as 1 + 460 + 460*459 + 460*459*458 etc.

bc, 17 chars

scale=read()
e(1)


Vyxal, 2 bytes

∆Ė


Try it Online!

Built in solution.

J, 17

(":&(x:^1)@*&0j1)


Example:

(":&(x:^1)@*&0j1) 50
2.71828182845891281655718620537435347047040502245993


Uses built in exponential verb - so, "compute" is on shaky grounds. Basically:

^1 - computes e**1
x: - does extended precision
0jy ": - formats the number to y digit

• *&0j1 is simply j. Commented Oct 27, 2017 at 0:29

Uses a spigot algorithm - http://comjnl.oxfordjournals.org/content/11/2/229.full.pdf+html.

Byte count not given as Mathcad byte count equivalence is yet to be determined. However, using a symbol equivalence it is roughly 121 bytes ... and not going to win any brevity prizes no matter how the equivalence is determined.

Mathematica, 7 bytes

N[E,#]&


Try it online!

For some reason, the output over at TIO looks funny but I tested it on my machine and the code works just fine.

GTB, 14

eS?AS;_,1,A+1


Explanation

e - Put e as the last calculated value

S? - Convert e to string _

A - Input A

S;_,1,A+1 Display the first A digits of e

Perl 5-Mbignum=bexp -p, 12 bytes

$_=bexp 1,$_
`

Try it online!