Calculez les N premiers chiffres de e

13

Défi

Écrire un programme pour calculer les N premiers chiffres (<= 10 ^ 3) de e .

Votre programme doit prendre un entier N en entrée.

Contribution:

100

Production:

2.718281828459045235360287471352662497757247093699959574966967627724076630353547594571382178525166427

Contribution:

7

Production:

2.718282

Contribution:

1000

Production:

2.718281828459045235360287471352662497757247093699959574966967627724076630353547594571382178525166427427466391932003059921817413596629043572900334295260595630738132328627943490763233829880753195251019011573834187930702154089149934884167509244761460668082264800168477411853742345442437107539077744992069551702761838606261331384583000752044933826560297606737113200709328709127443747047230696977209310141692836819025515108657463772111252389784425056953696770785449969967946864454905987931636889230098793127736178215424999229576351482208269895193668033182528869398496465105820939239829488793320362509443117301238197068416140397019837679320683282376464804295311802328782509819455815301756717361332069811250996181881593041690351598888519345807273866738589422879228499892086805825749279610484198444363463244968487560233624827041978623209002160990235304369941849146314093431738143640546253152096183690888707016768396424378140592714563549061303107208510383750510115747704171898610687396965521267154688957035035

La solution la plus courte gagne!

Chimérique
la source

Réponses:

8

Mathematica (12 octets)

N[E,Input[]]
Chimérique
la source
Vous pouvez l'essayer en ligne: il y a une e-digitscommande sur yubnub.org par exemple, yubnub.org/parser/parse?command=e-digits+1000 qui utilise wolframalpha wolframalpha.com/input/…
jfs
1
-1 car vous n'implémentez pas le calcul par vous-même.
FUZxxl
2
@FUZxxl: L'auteur n'a pas demandé d'implémentation, seules les plus courtes sont préférées.
Quixotic
7
@Quixotic La question dit "calculer" et pas seulement la sortie. Auriez-vous soutenu la même chose si la question avait dit "calculer" au lieu de "calculer"?
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]

Calcule N + 2 itérations de la série de puissances standard pour e.

hallvabo
la source
6

J, 20 ... ish.

Calcul, mais ... Très inefficace. Avec n défini (20):

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

En tant que fonction monadique (32):

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

En tant que fonction tacite (33, fixe):

(0 j.<:)":(+/)&:(%&!&i.&x:&(9&+))
Jesse Millikan
la source
Cela converge très rapidement (pour 100 chiffres, vous avez besoin de "seulement" 70 termes) afin que vous puissiez le supprimer +9.
Eelvex
Pour 1000 chiffres, ceci: ne (0 j.<:1000)":+/%!i.x:450prend que quelques secondes.
Eelvex
Souhaitez-vous expliquer votre code?
aaaaaaaaaaaa
@Eelvex: Mais j'ai besoin de termes supplémentaires jusqu'à N = 30 environ. (Avez-vous des conseils pour réduire ce gâchis de compositions, ou est-ce correct?)
Jesse Millikan
Ah, tu as raison, c'est dommage. (Ce « désordre » est plus court que tout ce que je pouvais venir avec - à moins, bien sûr, vous utilisez un numéro fixe pour i comme:. (0 j.<:n)":+/%!i.999x, Puis tacitement: (+/%!i.999x)":~0 j.<:)
Eelvex
5

Python, 67

import decimal as d
d.getcontext().prec=input()
print d._One.exp()
jfs
la source
Enregistrer 3 caractères? from decimal import*et retirez les deuxd.
Timtech
@Timtech n'importera import *pas en _Oneraison du trait de soulignement principal.
jfs
D'accord, je ne le savais pas, désolé /
Timtech
3

05AB1E, 4 3 2 octets

Barré 4 est toujours régulier 4; (

Merci à @Adnan pour un octet.

žt

Utilise l' encodage CP-1252 .

Explication:

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

Mise à jour:

Supprimez I, car žtprend quand même l'entrée s'il n'y en a pas sur la pile.

George Gibson
la source
1
J'ai marqué cela comme non concurrent car 05AB1E a été créé environ 4 ans et demi après la publication de ce défi.
Mego
@Mego OK, je me souviendrai de le faire la prochaine fois.
George Gibson
1
Bienvenue dans Programmation d'énigmes et Code Golf! Le žcaractère fait 1 octet dans le codage CP-1252 , ce qui donne un score total de 2 octets au lieu de 3: p.
Adnan
@Adnan Merci! Nice language, btw.
George Gibson
@GeorgeGibson Merci! :)
Adnan
2

Rubis, 68

require 'bigdecimal/math';include BigMath;puts E(gets.to_i).to_s 'F'
david4dev
la source
cela ne fonctionne pas sur ruby1.8. Il produit des résultats invalides sur ruby1.9
jfs
Vous avez raison, mais cela devrait fonctionner dans Ruby 1.9. Il semble y avoir un problème de précision dans la fonction E.
david4dev
Ça a l'air bien ici, cela ajoute juste des chiffres imprécis. Mayby aime ça? require'bigdecimal / math '; met 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.'\

Edit: je pourrais aussi bien remplacer le 0 par le 1 restant de l'initialisation de b, la différence résultante est beaucoup trop petite pour arriver à la sortie.

J'ai laissé l'ancienne version car c'est ce que j'ai documenté ci-dessous.

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

~10\?Prenez l'entrée et calculez 10 ^ entrée, laissez le résultat sur la pile.
1:b;Conserver 1 dans b.
0 461,Mettez 0 sur la pile, mettez le tableau [0 1 ... 459 460] sur la pile.
{ }460*Exécutez la fonction 460 fois.
)b*:bPrenez le dernier élément du tableau, multipliez-le par b, stockez le résultat dans b et laissez le résultat sur la pile.
@+\Basculez le 0 (qui n'est qu'un zéro à la première itération) vers le haut de la pile, ajoutez-le à la valeur b restante et remettez le résultat en place.
;Supprimez le reste du tableau (il ne reste que [0]).
Le nombre initialisé à 0 contient désormais la valeur e * 460! et b maintenez 460!
*Multipliez 10 ^ par e * 460! (ils sont à ce stade les 2 seuls éléments restants sur la pile).
b/Divisez le résultat par b.
La pile contient maintenant la valeur e * 10 ^ entrée qui, une fois convertie en chaîne, contiendra toutes les décimales, mais pas le point.
`);(;'2.'\Un tas d'opérations de chaîne pour tenir dans le point.

e * 460! est calculé comme 1 + 460 + 460 * 459 + 460 * 459 * 458 etc.

aaaaaaaaaaaa
la source
1

bc , 17 caractères

scale=read()
e(1)
Tomas
la source
0

J, 17

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

Exemple:

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

Utilise un verbe exponentiel intégré - donc, "calculer" est sur des terrains instables. Fondamentalement:

^1 - computes e**1
x: - does extended precision
0jy ": - formats the number to y digit
Barbermot
la source
*&0j1est tout simplementj.
FrownyFrog
0

GTB , 14

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

Explication

e- Mettre ecomme dernière valeur calculée

S?- Convertir een chaîne_

`A - Entrée A

S;_,1,A+1Afficher les premiers Achiffres dee

Timtech
la source
0

Mathcad, [tbd] octets

entrez la description de l'image ici

Utilise un algorithme de spigot - http://comjnl.oxfordjournals.org/content/11/2/229.full.pdf+html .


Le nombre d'octets n'est pas donné car l'équivalence du nombre d'octets Mathcad reste à déterminer. Cependant, en utilisant une équivalence de symbole, elle est d'environ 121 octets ... et ne va gagner aucun prix de concision, quelle que soit la manière dont l'équivalence est déterminée.

Stuart Bruff
la source
0

Mathematica, 7 octets

N[E,#]&

Ma réponse est un autre golf de cette réponse.

Essayez-le en ligne!

Pour une raison quelconque, la sortie sur TIO a l'air drôle, mais je l'ai testée sur ma machine et le code fonctionne très bien.

RGS
la source