64 바이트 이하에서 가능한 많은 소수점 이하 자릿수의 상수


22

Khinchin의 상수는 , 호기심 수학 상수입니다 볼프람 MathWold에 따르면 ,이다 "높은 정밀도로 계산하기 어렵기로 악명이 높다" .

여기 100 자리입니다 :

2.685452001065306445309714835481795693820382293994462953051152345557218859537152002801141174931847697 ...

64 바이트 이하로 Khinchin의 상수를 정확한 소수 자릿수까지 출력 하는 프로그램을 작성 하십시오.

  • Khinchin의 상수와 직접 관련된 내장 라이브러리 상수 또는 함수를 사용할 수 없습니다. (예 : Math.Khinchin (precision)은 절대 허용되지 않습니다.)
  • 수학 라이브러리를 사용하여 로그, 합계 등을 계산할 수 있습니다 .
  • 답변의 전부 또는 일부를 하드 코딩 있습니다 .
  • 프로그램은 유한 출력을 생성하고 합리적으로 최신 컴퓨터 (예 : 여기에 나열된 컴퓨터)에서 1 시간 이내에 실행해야합니다 .
  • stdout으로 출력해야합니다. 입력이 없습니다.
  • http://mothereff.in/byte-counter가 64 바이트 이하를 등록하는 한 원하는 문자를 사용할 수 있습니다 .

채점

당신의 점수는 2.68부터 시작하여 프로그램이 올바르게 출력하는 Khinchin 상수의 연속적인 자릿수입니다 ... 당신은 잘못된 자릿수를 출력 할 수 있지만 마지막 올바른 자릿수 만 점수에 포함됩니다.

예를 들어,

2.68545200 2 06530644530971483548179569382038229399446295305115234555721

9 점을 얻었습니다. 각 숫자마다 하나씩 2 6 8 5 4 5 2 0 0이지만 2 뒤에는 1 이 아닌 것은 없습니다 .


2
왜 전체 답변을 하드 코딩 할 수 있습니까?
William Barbosa

5
@WilliamBarbosa 왜 안돼? 이상적으로는 31보다 나은 점수를 얻는 솔루션이 있어야합니다. 그렇지 않으면 안타깝습니다.
Martin Ender

1
유니 코드가 허용됩니까? 계산하는 방법?
aditsu

3
32 대신 64b를 허용하고 모든 문자를 UTF-8 바이트 ( mothereff.in/byte-counter ) (유니 코드 평면에 따라 문자 당 1-4 바이트)로 계산해야합니다. 또한 기존 솔루션을 64b에 쉽게 적용 할 수 있습니다
xem

3
@PeterTaylor 저는 CJam 부동 소수점 솔루션을 코딩했으며 제한된 정밀도가 주요한 문제가 아니라는 것을 알려 드리겠습니다 : p
aditsu

답변:


11

메이플, 200+

다음 메이플 명령은 Khinchin의 상수를 요청 된 정밀도 (여기서는 200 자리)로 계산합니다.

evalf[200](exp(sum((-1)^k*(2-2^k)*ζ(1,k)/k,k=2..∞)/ln(2)));

이 코드는 Maple 그래픽 인터페이스에 복사하여 붙여 넣을 경우 작동합니다. 는 ζ두 UTF-8 바이트와 소요 62 바이트, 총 세.

아아 min()대신에 사용하는 트릭으로도 해당 심볼의 ASCII 버전을 작성 infinity하면 바이트 수가 최대 66이됩니다.

evalf[200](exp(sum((-1)^k*(2-2^k)*Zeta(1,k)/k,k=2..min())/ln(2)));

다음에 대괄호 안에있는 숫자를 변경하면 계산 된 자릿수를 쉽게 조정할 수 있습니다 evalf. 다소 오래된 컴퓨터에서 200 자리 숫자는 약 30 분 안에 끝나는 것 같습니다. 당신은 더 많은 능력을 가질 수 있습니다. 메이플 은 결과를 자르지 않고 요청한 정밀도로 반올림 하므로 실제 일치하는 자릿수는 다소 적을 수 있습니다.

상수를 계산하는이 방법은 MathWorld 페이지 의 공식 (9)를 기반으로 Gosper (1996, pers. comm.)에 인용되어 있습니다.

            Equation

이것은 64 바이트 이하로 (간신히) 압축하는 가장 효율적인 방법이었습니다.


꽤 깔끔한. 내가 메이플을 가졌다면 : /
Calvin 's Hobbies

12

CJam-118

2'."*;TeT?_aN{.i9B*ZEay
G`9~eW}nE=Lr-`B}    )D>9m9"136b

http://cjam.aditsu.net/ 에서 시도 하십시오

stackexchange는 일부 문자를 제거하므로 위의 프로그램을 생성하는 프로그램이 있습니다. 먼저 실행 한 다음 출력을 실행하십시오.

"2'.\""685452001065306445309714835481795693820382293994462953051152345557218859537152002801141174931847697995153465905288090 136b:c"\"136b"

설명:

2누름 2
'.누름 점
"…"은 인코딩 된 양식의 나머지 숫자를 포함하는 문자열로 문자열을 숫자로
128b변환하여 문자를 기본 128의 숫자 (ASCII 코드를 통해)로 처리합니다.


2
아주 좋아요 조금 설명해 주시겠습니까?
Kyle Kanos

@KyleKanos 님이 설명을 추가했습니다
aditsu

대단해. 언젠가 CJam을 배워야합니다 ... 또한 온라인 통역사가 Opera 웹 브라우저에서 작동하도록 할 수는 없지만 Firefox에서 작동합니다. 아마도 오페라 문제 일지 모르지만 제가 언급 할 것이라고 생각했습니다.
Kyle Kanos

1
@ Calvin'sHobbies 1997 년 Xavier Gourdon은 최대 250MHz 프로세서를 사용하여 22 시간 동안 처음 11 만 자리를 계산했습니다. 따라서 한 시간 안에이 솔루션보다 1000 배 많은 자릿수를 계산할 수 있습니다. web.archive.org/web/20120218093629/http://pi.lacim.uqam.ca/…
Alex L

1
@ Calvin'sHobbies 는 7 초 안에 2000 자리 숫자를 계산 한 것으로 알려진 전체 프로그램에 대한 이 링크 를 참조하십시오 .
aditsu

5

코나 63

간단한 하드 코딩 된 답변 :

2.68545200106530644530971483548179569382038229399446295305115234

음, 63이 아니에요?
xem

@xem : 사소한 인쇄상의 오류입니다. 결정된. : D
Kyle Kanos


@ DigitalTrauma : 아마도 다른 여러 언어로도 작동 할 수 있습니다. 이전에 대답했기 때문에 Kona와 붙어 있습니다.
Kyle Kanos

5

하스켈, 5

글쎄, 아무도 실제 수학을 사용하여 솔루션을 게시하지 않았기 때문에 다른 답변만큼 가깝지는 않지만 나는 그렇게하기로 결정했습니다.

main=print$product[(1+1/r/(r+2))**2`logBase`r|r<-[1..99999999]]

이것은 2.6854453689859192상수의 무려 5자인를 계산합니다 . Wolfram은 "고정밀 도로 계산하기 어렵다"고 말했을 때 옳았습니다.


63 바이트 프로그램-여분의 1 바이트! 좋은!
디지털 외상

여분의 바이트는 다른 바이트 일 수 9있지만 내 컴퓨터는 처리 할 수 ​​없을 수 있지만 다른 정확한 숫자가 나오는지 확실하지 않습니다.
Zaq

루비를 사용하면 기본적 으로이 수식을 사용하여 최대 60 초 안에이 수식을 사용할 수 있습니다. 나는 얻었다 2.685451312659854: tio.run/##KypNqvz/P9vWkEvDUE/…
단순히 아름다운 예술

3

매스 매 티카, 6

(Times@@Rest@ContinuedFraction[Pi,977])^(1.`9/976)

준다

2.68545843

50 바이트 만 Pi사용하므로 더 큰 것을 계속 사용하고 더 큰 부분을 사용하기 위한 공간이 있지만 한 시간의 런타임으로 더 나아질지는 확실하지 않습니다. (특히 더 나은 조합을 찾으면 무차별 대입을 사용하는 경우 며칠이 걸릴 수 있습니다.)

(물론, 당신은 허용하지 않을 정도로 영리했고 Khinchin~N~2000, 20001 시간 안에 결과를 줄 수있는 숫자로 대체 될 수있었습니다.)


1
공식뿐만 아니라 상수의 의미를 사용하기 위해 +1.
Vi.

2

wxMaxima 3

실제로 계산 된 방법!

bfloat(product((1+1/(n*(n+2)))^(log(n)/log(2)),n,1,10000));

약 25 분 후

2.681499686663101b0

이제 Mathematica 페이지가 왜 그런지 이해했습니다. 나는 6자를 가지고 놀았지만 6 0을 추가하는 것을 상상할 수 없다.


의혹 : 각 추가 제로보다 하나 개 더 정확한 숫자를 추가합니다 '(
간단하게 아름다운 예술

1

GNU BC , 5 자리 (54 바이트 프로그램)

실제로 계산하려는 시도. GNU BC는 엄청나게 느립니다. 2012 년 중반 MacBook Pro Retina에서 실행되는 Ubuntu 14.04 VM에서 53 분 동안 실행되었습니다. 이상하게도 OSX 베어 메탈보다 VM에서 더 빠르게 실행됩니다. 아마도 GNU 버전이 BSD 버전보다이 작업에 더 적합 할 것입니다.

for(k=r=1;r++<10^7;)k*=e(l(1/(r*(r+2))+1)*l(r)/l(2))
k

산출:

2.68544536902156538295

노트 :

bc -le()l()기능에 사용되어야 합니다 (및 설정 스케일 = 20).


1

CJam 부동 소수점 계산-6

1e8{I{1.II2+*/)I2mL#*}1.?}fI

원래 32 바이트에 맞습니다. :)

java 8을 사용하여 Java 인터프리터로 실행하면 약 1 분 후에 랩톱에서 다음을 출력합니다.

2.6854513126595827

온라인 통역사가 아마도 너무 오래 걸릴 것입니다.


1

파이썬, 64 66

print"2.%i"%int('anljsgqif7gwwwsrntcz7zv2obv6gv5us7fzfwjcaj',36)

출력 :

2.68545200106530644530971483548179569382038229399446295305115234555

print다른 캐릭터를 쥐어 짜기 위해 공백을 줄일 수 있습니다 .
xnor

1

루비-73

불행히도 to_iRuby에서는 다음을 사용하여 기본 36까지만 변환 할 수 있습니다 .

"2.#{"hmegxpkvliy1vaw4lb054ep8wsqwkz2yx9cm9jvc9yfd48j".to_i 36}"

어떤 반환

"2.6854520010653064453097148354817956938203822939944629530511523455572188595"

1

RPL / 2, 7 자리 숫자, 61 바이트

'LN(FLOOR(1/X))/(X+1)/LN(2)' { 'X' 1e-9 1 } 1e-7 INT DROP EXP

내 오래된 (인텔 Core2) 랩톱에서 1 분 안에 2.68545210493822를 반환합니다.

내가 아는 한 RPL / 2에는 Zeta 기능이 없으므로 이것이 통합을 사용한 이유입니다 (Mathworld 페이지의 공식 15). 원칙적으로 1e-9와 1e-7을 더 작은 수로 대체하여 정확도를 향상시킬 수는 있었지만 메모리가 부족한 것 같습니다.

물론 무한한 제품에 의지하여이 점을 해결하면

1 1 1e9 FOR I 1 1 I dup 2 + * / + I LN 2 LN / ^ * NEXT

HP RPL 계산에서와 같이 작동하지만 랩톱에서 2 배 느리게 나타납니다 (노트북에서는 시도하지 않았습니다!).

따라서 RPL / 2의 통합 알고리즘은 실제로 상당히 잘 작동합니다.


0

많은 언어, 61

죄송합니다. 더 나은 해결책을 찾지 못했습니다.

"2.685452001065306445309714835481795693820382293994462953051152"

규칙은 올바른 숫자 순서 앞에 따옴표를 붙일 수 없다고 말하지 않으므로 이것을 사용하고 있습니다. 예를 들어 JS 콘솔에서이를 실행하면 따옴표를 포함하여 동일한 문자열을 얻게됩니다.


1
예, 인용 부호가 있어도 유효합니다. 2.685 ...가 중단되지 않는 것만 중요합니다.
Calvin 's Hobbies

0

파이썬 (5)

x=3**.1
p=1
for _ in[1]*10**6:p*=(x//1)**1e-6;x=1/(x%1)
print(p)

Output: 2.6854396408091694

(출력은 ~ 2 초가 소요됩니다.)

다른 수학 솔루션과 연대하기 위해, 나는 작동하지 않는 것으로 알려진 유형이 아닌 임의의 작은 비이성적 인 단일 백만 연속 분수 계수의 기하 평균을 계산하는 더 수렴적인 것을 제공 할 것입니다. 실제로, 나는 여분의 숫자와 일치하는 숫자를 얻을 때까지 몇 가지를 시도하여 그 숫자를 조작했습니다.

재미있는 것은 : 내 컴퓨터를 동결 및 교체의 파이썬 골프 트릭이 코드 단축하려고 후 하드 종료를해야했다 for _ in[1]*10**6:code과를 exec("code"*10**6).


0

ES7, 56

alert`2.6854520010653064453097148354817956938203822939944629531`
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.