Berechnen Sie die ersten N Stellen von e

13

Herausforderung

Schreiben Sie ein Programm, um die ersten N (<= 10 ^ 3) Stellen von e zu berechnen .

Ihr Programm sollte eine Ganzzahl N als Eingabe verwenden.

Eingang:

100

Ausgabe:

2.718281828459045235360287471352662497757247093699959574966967627724076630353547594571382178525166427

Eingang:

7

Ausgabe:

2.718282

Eingang:

1000

Ausgabe:

2.718281828459045235360287471352662497757247093699959574966967627724076630353547594571382178525166427427466391932003059921817413596629043572900334295260595630738132328627943490763233829880753195251019011573834187930702154089149934884167509244761460668082264800168477411853742345442437107539077744992069551702761838606261331384583000752044933826560297606737113200709328709127443747047230696977209310141692836819025515108657463772111252389784425056953696770785449969967946864454905987931636889230098793127736178215424999229576351482208269895193668033182528869398496465105820939239829488793320362509443117301238197068416140397019837679320683282376464804295311802328782509819455815301756717361332069811250996181881593041690351598888519345807273866738589422879228499892086805825749279610484198444363463244968487560233624827041978623209002160990235304369941849146314093431738143640546253152096183690888707016768396424378140592714563549061303107208510383750510115747704171898610687396965521267154688957035035

Kürzeste Lösung gewinnt!

Quixotic
quelle

Antworten:

8

Mathematica (12 Bytes)

N[E,Input[]]
Quixotic
quelle
Sie können versuchen , es online: es gibt einen e-digitsBefehl auf yubnub.org zB yubnub.org/parser/parse?command=e-digits+1000 dass Anwendungen Wolframalpha wolframalpha.com/input/...
JFS
1
-1, weil Sie die Berechnung nicht selbst durchführen.
FUZxxl
2
@FUZxxl: Der Autor hat nicht nach einer Implementierung gefragt, nur die kürzesten werden bevorzugt.
Quixotic
7
@Quixotic Die Frage lautet "compute" und nicht nur "output". Hätten Sie dasselbe argumentiert, wenn die Frage "rechnen" statt "rechnen" lautete?
nitro2k01
7

Python, 69

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

Berechnet N + 2 Iterationen der Standard-Potenzreihe für e.

hallvabo
quelle
6

J, 20 ... ish.

Computergestützt, aber ... sehr ineffizient. Mit n definiert (20):

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

Als monadische Funktion (32):

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

Als implizite Funktion (33, fest):

(0 j.<:)":(+/)&:(%&!&i.&x:&(9&+))
Jesse Millikan
quelle
Dies konvergiert sehr schnell (für 100 Stellen benötigen Sie "nur" 70 Terme), sodass Sie diese fallen lassen können +9.
Eelvex
Bei 1000 Stellen (0 j.<:1000)":+/%!i.x:450dauert dies nur einige Sekunden.
Eelvex
Möchten Sie Ihren Code erklären?
aaaaaaaaaaa
@Eelvex: Aber ich brauche zusätzliche Begriffe bis N = 30 oder so. (Irgendwelche Hinweise zum Reduzieren dieses Durcheinanders von Komponisten, oder ist das ungefähr richtig?)
Jesse Millikan
Ah, du hast recht, das ist bedauerlich. (Das „Chaos“ ist kürzer als alles andere könnte ich kommen mit - es sei denn, vom Kurs abgekommen, verwenden Sie eine feste Anzahl für i wie:. (0 j.<:n)":+/%!i.999x, Dann stillschweigend: (+/%!i.999x)":~0 j.<:)
Eelvex
5

Python, 67

import decimal as d
d.getcontext().prec=input()
print d._One.exp()
jfs
quelle
3 Zeichen sparen? from decimal import*und beide entfernend.
Timtech
@Timtech import *wird _Oneaufgrund des führenden Unterstrichs nicht importiert .
JFS
Okay, wusste das nicht, sorry /
Timtech
3

05AB1E, 4 3 2 Bytes

Durchgestrichen 4 ist immer noch regulär 4; (

Vielen Dank an @Adnan für ein Byte.

žt

Verwendet CP-1252 Codierung.

Erläuterung:

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

Aktualisieren:

Entfernen I, da žtdie Eingabe sowieso übernommen wird, wenn sich keine auf dem Stapel befindet.

George Gibson
quelle
1
Ich habe dies als nicht konkurrierend markiert, da 05AB1E etwa viereinhalb Jahre nach Veröffentlichung dieser Herausforderung erstellt wurde.
Mego
@Mego OK, ich werde mich daran erinnern, das nächste Mal zu tun.
George Gibson
1
Willkommen bei Programming Puzzles und Code Golf! Das žZeichen ist 1 Byte in der CP-1252- Codierung, sodass die Gesamtpunktzahl 2 Byte anstelle von 3: p beträgt .
Adnan
@Adnan Danke! Schöne Sprache übrigens.
George Gibson
@ George Gibson Danke! :)
Adnan
2

Rubin, 68

require 'bigdecimal/math';include BigMath;puts E(gets.to_i).to_s 'F'
david4dev
quelle
es funktioniert nicht auf ruby1.8. Es erzeugt ungültige Ergebnisse auf ruby1.9
jfs
Sie haben recht, aber es sollte in Ruby 1.9 funktionieren. An der Genauigkeit der E- Funktion scheint etwas nicht zu stimmen .
David4Dev
Sieht hier gut aus, fügt nur einige ungenaue Ziffern hinzu. Darf das gefallen? require'bigdecimal / math '; setzt BigMath :: E (a = gets.to_i) .to_s (? F) [0, a + 1]
steenslag
1

GolfScript 43 41

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

Bearbeiten: Ich könnte genauso gut die 0 durch die übrig gebliebene 1 aus der Initialisierung von b ersetzen, der resultierende Unterschied ist viel zu klein, um es zur Ausgabe zu bringen.

Ich habe die alte Version so belassen, wie ich es unten dokumentiert habe.

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

~10\?Eingaben nehmen und 10 ^ Eingaben berechnen, das Ergebnis auf dem Stapel belassen.
1:b;Speichern Sie 1 in b.
0 461,Legen Sie 0 auf den Stapel und legen Sie das Array [0 1 ... 459 460] auf den Stapel.
{ }460*Führen Sie die Funktion 460 Mal aus.
)b*:bNehmen Sie das letzte Element des Arrays, multiplizieren Sie es mit b, speichern Sie das Ergebnis in b und belassen Sie das Ergebnis auf dem Stapel.
@+\Setzen Sie die 0 (die bei der ersten Iteration nur eine Null ist) oben auf den Stapel, addieren Sie sie zum verbleibenden b-Wert und schalten Sie das Ergebnis wieder zurück.
;Entfernen Sie den Rest des Arrays (nur noch [0]).
Die auf 0 initialisierte Zahl hat jetzt den Wert e * 460! und b halten 460!
*Multiplizieren Sie 10 ^ Eingabe mit e * 460! (Sie sind zu diesem Zeitpunkt die einzigen 2 auf dem Stapel verbleibenden Elemente).
b/Teilen Sie das Ergebnis durch b.
Der Stack enthält jetzt den Wert e * 10 ^ input, der bei der Konvertierung in einen String alle Dezimalstellen enthält, jedoch nicht den Punkt.
`);(;'2.'\Eine Reihe von Zeichenfolgenoperationen, die in den Punkt passen.

e * 460! wird berechnet als 1 + 460 + 460 * 459 + 460 * 459 * 458 usw.

aaaaaaaaaaa
quelle
1

v.Chr . 17 Zeichen

scale=read()
e(1)
Tomas
quelle
0

J, 17

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

Beispiel:

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

Verwendet in exponentiellen Verb gebaut - so ist "rechnen" auf wackeligen Gründen. Grundsätzlich:

^1 - computes e**1
x: - does extended precision
0jy ": - formats the number to y digit
Barbermot
quelle
*&0j1ist einfachj.
FrownyFrog
0

AGB , 14

eS?`AS;_,1,A+1

Erläuterung

e- Geben Sie eden zuletzt berechneten Wert ein

S? - Konvertieren e String_

`A - Eingang A

S;_,1,A+1Zeigt die ersten AZiffern von ane

Timtech
quelle
0

Mathcad, [tbd] Bytes

Bildbeschreibung hier eingeben

Verwendet einen Spigot-Algorithmus - http://comjnl.oxfordjournals.org/content/11/2/229.full.pdf+html .


Die Byteanzahl, die nicht als Mathcad-Byteanzahl-Äquivalenz angegeben ist, muss noch ermittelt werden. Unter Verwendung einer Symboläquivalenz sind es jedoch ungefähr 121 Bytes ... und es werden keine Kürzepreise gewonnen, unabhängig davon, wie die Äquivalenz bestimmt wird.

Stuart Bruff
quelle
0

Mathematica, 7 Bytes

N[E,#]&

Meine Antwort ist ein weiterer Golf dieser Antwort.

Probieren Sie es online!

Aus irgendeinem Grund sieht die Ausgabe bei TIO lustig aus, aber ich habe sie auf meinem Computer getestet und der Code funktioniert einwandfrei.

RGS
quelle