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!

Réponses:


8

Mathematica (12 octets)

N[E,Input[]]

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.


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&+))

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()

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.


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'

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.



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

*&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


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.


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.


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.