Hitung angka N pertama dari e

13

Tantangan

Tulis program untuk menghitung digit N pertama (<= 10 ^ 3) dari e .

Program Anda harus mengambil bilangan bulat N sebagai input.

Memasukkan:

100

Keluaran:

2.718281828459045235360287471352662497757247093699959574966967627724076630353547594571382178525166427

Memasukkan:

7

Keluaran:

2.718282

Memasukkan:

1000

Keluaran:

2.718281828459045235360287471352662497757247093699959574966967627724076630353547594571382178525166427427466391932003059921817413596629043572900334295260595630738132328627943490763233829880753195251019011573834187930702154089149934884167509244761460668082264800168477411853742345442437107539077744992069551702761838606261331384583000752044933826560297606737113200709328709127443747047230696977209310141692836819025515108657463772111252389784425056953696770785449969967946864454905987931636889230098793127736178215424999229576351482208269895193668033182528869398496465105820939239829488793320362509443117301238197068416140397019837679320683282376464804295311802328782509819455815301756717361332069811250996181881593041690351598888519345807273866738589422879228499892086805825749279610484198444363463244968487560233624827041978623209002160990235304369941849146314093431738143640546253152096183690888707016768396424378140592714563549061303107208510383750510115747704171898610687396965521267154688957035035

Solusi terpendek menang!

Pemurah
sumber

Jawaban:

8

Mathematica (12 byte)

N[E,Input[]]
Pemurah
sumber
Anda dapat mencobanya secara online: ada e-digitsperintah di yubnub.org misalnya, yubnub.org/parser/parse?command=e-digits+1000 yang menggunakan wolframalpha wolframalpha.com/input/…
jfs
1
-1 karena Anda tidak menerapkan perhitungan sendiri.
FUZxxl
2
@FUZxxl: Penulis tidak meminta implementasi, hanya yang terpendek yang lebih disukai.
Quixotic
7
@ Quixotic Pertanyaannya tidak mengatakan "menghitung" bukan hanya output. Apakah Anda akan berdebat hal yang sama jika pertanyaan itu mengatakan "menghitung", bukan "menghitung"?
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]

Menghitung iterasi N + 2 dari seri daya standar untuk e.

hallvabo
sumber
6

J, 20 ... ish.

Komputasi, tapi ... Sangat tidak efisien. Dengan n didefinisikan (20):

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

Sebagai fungsi monadik (32):

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

Sebagai fungsi tersembunyi (33, diperbaiki):

(0 j.<:)":(+/)&:(%&!&i.&x:&(9&+))
Jesse Millikan
sumber
Konvergensi ini sangat cepat (untuk 100 digit Anda memerlukan "hanya" 70 istilah) sehingga Anda dapat menghapusnya +9.
Eelvex
Untuk 1000 digit ini: (0 j.<:1000)":+/%!i.x:450hanya butuh beberapa detik.
Eelvex
Apakah Anda mau menjelaskan kode Anda?
aaaaaaaaaaaa
@Eelvex: Tapi saya perlu ketentuan tambahan hingga N = 30 atau lebih. (Adakah petunjuk untuk mengurangi kekacauan komposisi lagu, atau apakah itu benar?)
Jesse Millikan
Ah, kamu benar, sangat disayangkan. ("Kekacauan" itu lebih pendek dari apa pun yang bisa saya buat - kecuali, tentu saja, Anda menggunakan nomor tetap untuk saya seperti (0 j.<:n)":+/%!i.999x:; lalu diam-diam:(+/%!i.999x)":~0 j.<: )
Eelvex
5

Python, 67

import decimal as d
d.getcontext().prec=input()
print d._One.exp()
jfs
sumber
Hemat 3 karakter? from decimal import*dan hapus keduanyad.
Timtech
@Timtech import *tidak akan mengimpor _Onekarena garis bawah utama.
jfs
Oke, tidak tahu itu, maaf /
Timtech
3

05AB1E, 4 3 2 byte

Dicoret 4 masih teratur 4; (

Terima kasih kepada @Adnan untuk satu byte.

žt

Menggunakan pengodean CP-1252 .

Penjelasan:

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

Memperbarui:

Hapus I, seperti žtmengambil input pula jika tidak ada di stack.

George Gibson
sumber
1
Saya telah menandai ini sebagai non-bersaing karena 05AB1E dibuat sekitar 4 setengah tahun setelah tantangan ini diposting.
Mego
@Mego OK, saya akan ingat untuk melakukannya lain kali.
George Gibson
1
Selamat Datang di Programming Puzzles dan Code Golf! The žkarakter 1 byte dalam CP-1252 encoding, jadi ini memiliki skor total 2 byte bukan 3: p.
Adnan
@ Adnan Terima kasih! Bahasa yang bagus, btw.
George Gibson
@ GeorgeGibson Terima kasih! :)
Adnan
2

Ruby, 68

require 'bigdecimal/math';include BigMath;puts E(gets.to_i).to_s 'F'
david4dev
sumber
itu tidak berfungsi pada ruby1.8. Ini menghasilkan hasil yang tidak valid pada ruby1.9
jfs
Anda benar, tetapi itu harus bekerja di Ruby 1.9. Tampaknya ada sesuatu yang salah dengan presisi dalam fungsi E.
david4dev
Terlihat baik-baik saja di sini, itu hanya menambahkan beberapa angka yang tidak tepat. Mayby suka ini? require'bigdecimal / math '; menempatkan 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.'\

Sunting: Saya mungkin juga mengganti 0 dengan sisa 1 dari menginisialisasi b, perbedaan yang dihasilkan terlalu kecil untuk membuatnya menjadi output.

Saya meninggalkan versi lama karena itulah yang saya dokumentasikan di bawah ini.

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

~10\?Ambil input dan hitung 10 ^ input, biarkan hasilnya di tumpukan.
1:b;Simpan 1 di b.
0 461,Masukkan 0 pada stack, letakkan array [0 1 ... 459 460] pada stack.
{ }460*Jalankan fungsi 460 kali.
)b*:bAmbil elemen terakhir dari array, kalikan dengan b, simpan hasilnya di b dan biarkan hasilnya di stack.
@+\Ganti 0 (yang hanya nol pada iterasi pertama) ke atas tumpukan, tambahkan ke nilai b sisa, dan alihkan kembali hasilnya.
;Hapus sisa array (hanya [0] yang tersisa).
Angka yang diinisialisasi ke 0 sekarang memiliki nilai e * 460! dan b tahan 460!
*Lipat gandakan 10 ^ input dengan e * 460! (mereka pada saat ini hanya 2 elemen yang tersisa di tumpukan).
b/Bagilah hasilnya dengan b.
Tumpukan sekarang memiliki nilai input e * 10 ^ yang ketika dikonversi ke string akan menampung semua desimal, tetapi bukan titik.
`);(;'2.'\Sekelompok operasi string agar pas di titik.

e * 460! dihitung sebagai 1 + 460 + 460 * 459 + 460 * 459 * 458 dll.

aaaaaaaaaaaa
sumber
1

bc , 17 karakter

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

J, 17

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

Contoh:

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

Penggunaan yang dibangun dalam kata kerja eksponensial - jadi, "menghitung" adalah dengan alasan goyah. Pada dasarnya:

^1 - computes e**1
x: - does extended precision
0jy ": - formats the number to y digit
tukang cukur
sumber
*&0j1hanyalahj.
FrownyFrog
0

GTB , 14

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

Penjelasan

e- Masukkan esebagai nilai terhitung terakhir

S?- Konversi eke string_

`A - Masukan A

S;_,1,A+1Tampilkan Adigit pertamae

Timtech
sumber
0

Mathcad, [tbd] byte

masukkan deskripsi gambar di sini

Menggunakan algoritma keran - http://comjnl.oxfordjournals.org/content/11/2/229.full.pdf+html .


Hitungan byte yang tidak diberikan karena Mathcad byte equivalence belum ditentukan. Namun, menggunakan ekivalensi simbol kira-kira 121 byte ... dan tidak akan memenangkan hadiah singkat tidak peduli bagaimana kesetaraan ditentukan.

Stuart Bruff
sumber
0

Mathematica, 7 byte

N[E,#]&

Jawaban saya adalah golf lebih lanjut dari ini jawaban .

Cobalah online!

Untuk beberapa alasan, output di TIO terlihat lucu tapi saya mengujinya di komputer saya dan kodenya berfungsi dengan baik.

RGS
sumber