El reto
Debe calcular pi en la longitud más corta posible. Cualquier idioma es bienvenido y puede usar cualquier fórmula para calcular pi. Debe poder calcular pi con al menos 5 decimales. Más corto, se mediría en caracteres. La competencia dura 48 horas. Empezar.
Nota : Esta pregunta similar establece que PI debe calcularse utilizando la serie 4 * (1 - 1/3 + 1/5 - 1/7 + ...). Esta pregunta no tiene esta restricción, y de hecho muchas de las respuestas aquí (incluida la más probable de ganar) serían inválidas en esa otra pregunta. Entonces, esto no es un duplicado.
code-golf
pi
approximation
Poseidón
fuente
fuente
Respuestas:
Python3, 7
Se ejecuta en el shell interactivo
Salida:
3.1415929203539825
correcta a 6 decimales¡Y finalmente tengo una solución que supera a APL!
Ah, y en caso de que te lo preguntes, esta relación se llama 密 率 (literalmente "relación precisa"), y es propuesta por el matemático chino Zu Chongzhi (429-500 DC). Un artículo relacionado de Wikipedia se puede encontrar aquí . Zu también dio la relación 22/7 como la "relación aproximada", y se sabe que es el primer matemático en proponer que 3.1415926 <= pi <= 3.1415927
fuente
355/113
. Bajo votaron respuesta:3+.14159
. No veo mucha diferencia, de verdad.PHP -
132127125124 bytesSimulación básica de Montecarlo. Cada 10 millones de iteraciones, imprime el estado actual:
¡Gracias a cloudfeet y zamnuts por sus sugerencias!
Salida de muestra:
fuente
$j+=$x*$x+$y*$y<=1;
que le ahorraría cuatro bytes.$k+=1/4;
yprint $j/$k
podría reducirse a$k++;
yprint 4*$j/$k
para otro byte.J 6
Explicación:
*.
da la longitud y el ángulo de un número complejo. El ángulo de -1 es pi.{:
toma la cola de la lista [longitud, ángulo]Solo para los fetichistas de la serie de convergencia lenta, para 21 bytes, una serie de Leibniz:
fuente
atan(0) + pi
. No creo que el uso de funciones trigonométricas y pi en sí deba contar como un "cálculo".Arg
(es decir, argumento de un número complejo) no es una función trigonométrica, a pesar de tener valores similares a los de arcotangenteatan(0) + pi
.Perl, 42 bytes
Calcula π usando la fórmula de Leibniz :
999999 se utiliza como n más grande para obtener la precisión de cinco dígitos decimales.
Resultado:
3.14159165358977
fuente
Piet, muchos codeles
No es mi respuesta, pero esta es la mejor solución que he visto para este problema:
Entiendo que suma los píxeles en el círculo y los divide por el radio, y luego nuevamente. Es decir:
Un mejor enfoque en mi mente es un programa que genera esta imagen en un tamaño arbitrario y luego la ejecuta a través de un intérprete Piet.
Fuente: http://www.dangermouse.net/esoteric/piet/samples.html
fuente
TÉCNICAMENTE ESTOY CALCULANDO, 9
TÉCNICAMENTE ESTOY CALCULANDO, 10
ESTOY CALCULANDO TAN DURO, 8
ACCIDENTEMENTE PI, 12
Y técnicamente, esta respuesta apesta.
fuente
APL - 6
Salidas
3.141592654
. Calcula el doble del arcoseno de 1.Una solución de 13 caracteres sería:
Esto resulta
3.141591654
para mí, que se ajusta a la precisión solicitada.Sin
+ 4/1 - 4/3 + 4/5 - 4/7 ...
embargo, utiliza la serie simple para calcular.fuente
¯2○¯1
?" (Es decir, acos -1). Pero eso da una aproximación compleja en repl.it (3.1415926425236J¯1.1066193467303274e¯8
). ¿Alguna idea de por qué? ¿Todas las implementaciones hacen eso?2 * asin(1)
es un poco tramposo, sin embargo.sqrt(1-theta^2)
(que aparece en muchas identidades trigonométricas) en algún momento y perdió algo de precisión en algún lugar, terminando con un poco negativo1-theta^2
.acos -0.75
. No hay forma de que pueda1 - 0.75 ^ 2
ser negativo.J - 5 bytes
Este medio
|log(-1)|
.fuente
ln(e^(42*pi))/42
opi*113/113
.Calculadora Google, 48
Toma un trozo de mantequilla, hace cálculos avanzados, hace pi con él. Pensé que como todos los demás estaban haciendo respuestas matemáticas simples, agregaría una un poco más única.
Ejemplo
fuente
stick of butter
es lindo y divertido, pero esta es esencialmente otrapi*x/x+y-y
identidad algebraica.Octava, 31
Calcula el área de un cuarto de círculo con radio 2, a través de la integración numérica.
fuente
Mathematica 6
fuente
Python, 88
Solución:
Salida de muestra en Python Shell:
Logra evitar cualquier importación. Se puede intercambiar fácilmente para usar la biblioteca Decimal de precisión arbitraria; simplemente reemplace
3.
conDecimal('3')
, establezca la precisión antes y después, luego unario más el resultado para convertir la precisión.Y a diferencia de una gran cantidad de las respuestas aquí, en realidad calcula π lugar de depender de constantes integradas o falsedad de matemáticas, es decir
math.acos(-1)
,math.radians(180)
, etc.fuente
lenguaje ensamblador x86 (5 caracteres)
Sin embargo, si esto carga una constante desde la ROM o si realmente calcula la respuesta depende del procesador (pero al menos en algunos, en realidad hace un cálculo, no solo carga el número desde la ROM). Para poner las cosas en perspectiva, se enumera como tomar 40 ciclos de reloj en un 387, lo que es más de lo que parece tener sentido si solo cargara el valor de la ROM.
Si realmente desea garantizar un cálculo, puede hacer algo como:
[para 27 caracteres]
fuente
fldpi
?asin(-1)
tampocofldpi
son particularmente interesantes o creativos. No tiene mucho sentido competir para ver qué idioma favorito tiene el nombre más corto para las funciones trigonométricas predefinidas y las constantes pi.bc -l, 37 bytes
No veo ninguna otra respuesta usando el producto Wallis , así que dado que lleva el nombre de mi homónimo (mi profesor de Historia de las Matemáticas recibió un gran impulso de eso), no pude resistirme.
Resulta que es un algoritmo bastante agradable desde la perspectiva del golf, pero su tasa de convergencia es abismal: se acerca a 1 millón de iteraciones solo para obtener 5 decimales:
bc -l, 15 bytes
Alternativamente, podemos usar Newton-Raphson para resolver
sin(x)=0
, con una aproximación inicial de 3. Debido a que esto converge en muy pocas iteraciones, simplemente codificamos 2 iteraciones, lo que da 10 decimales:La fórmula iterativa según Newton-Raphson es:
sin'
===cos
ycos(pi)
===-1
, así que simplemente aproximamos elcos
término para obtener:Salida:
fuente
pitón -
4745pi se calcula realmente sin funciones trigonométricas o constantes.
resultado:
fuente
C, 99
Calcula directamente el área / r ^ 2 de un círculo.
Esta función calculará pi contando el número de píxeles en un círculo de radio y
r
luego dividiendo entrer*r
(en realidad solo calcula un cuadrante). Conr
10000, tiene una precisión de 5 decimales (3.1415904800). Los parámetros de la función se ignoran, los acabo de declarar allí para ahorrar espacio.fuente
Javascript,
4336x
se conviertezeta(2)=pi^2/6
asísqrt(6*x)=pi
. (47 caracteres)Después de usar la propiedad distributiva y eliminar los corchetes del
for
bucle, obtienes:(43 caracteres)
Vuelve:
Editar:
Encontré una forma aún más corta usando el producto Wallis:
(36 caracteres)
Vuelve:
fuente
Python, Riemann zeta (
5841 char)O ahorre dos caracteres, pero use scipy
Editar : Guardado 16 (!) Caracteres gracias a amcgregor
fuente
math
importación y lasqrt
llamada girando a la exponenciación en su lugar:(6*sum(n**-2 for n in range(1,9**9)))**0.5
Javascript: 99 caracteres
Usando la fórmula dada por Simon Plouffe en 1996, esto funciona con 6 dígitos de precisión después del punto decimal:
Esta variante más larga (130 caracteres) tiene una mejor precisión, 15 dígitos después del punto decimal:
Hice esto basado en mis dos respuestas a esta pregunta .
fuente
Rubí,
545049Versión en línea para pruebas.
Otra versión sin crear una matriz (50 caracteres):
Versión en línea para pruebas.
fuente
a=__import__;reduce(a('operator').__add__,a('itertools').imap(lambda e:(-1.0)**e/(2*e+1)*4,xrange(9**6)))
- tenga en cuenta el uso de xrange / imap; en Python 3 puedes evitar esto; básicamente no quiero que toda tu RAM se consuma construyendo una lista con tantas entradas.TI CAS, 35
fuente
Perl - 35 bytes
Produce precisión de coma flotante completa. Una derivación de la fórmula utilizada se puede ver en otra parte .
Uso de la muestra:
Versión de precisión arbitraria
Extienda según sea necesario. La longitud de la iteración (p
-329..-1
. Ej. ) Debe ajustarse para que sea aproximadamente log 2 (10) ≈ 3.322 veces el número de dígitos.O, usando en su
bigint
lugar:Esto funciona notablemente más rápido, pero no incluye un punto decimal.
fuente
C # 192
Salidas:
No hay matemáticas involucradas. Simplemente busca la versión actual de TeX y realiza un análisis primitivo del html resultante. Eventualmente se convertirá en π según Wikipedia .
fuente
Python 3 Monte Carlo (103 caracteres)
fuente
Game Maker Language, 34
Asume todas las variables no inicializadas como 0. Esto es predeterminado en algunas versiones de Game Maker.
Resultado:
fuente
float k(){double x=0,i=0;for(;i++<999999;)x+=6/i/i;return sqrt(x);}
es más corto que este1e8
lugar de 999999for(i=1;i<1e8;)x+=6/i/i++;sqrt(x)
para guardar un byte (o alternativamentefor(i=1;i++<1e8;)
)?Java -
8355Versión más corta gracias a Navin.
Versión antigua:
fuente
180
porpi/180
.R : 33 caracteres
Esperemos que esto siga las reglas.
fuente
Rubí, 82
Utiliza alguna fórmula que realmente no entiendo y que acabo de copiar. :PAG
Salida:
3.1415926535897913
fuente
Rubí, 12
Yo estoy técnicamente "calculando"
piuna aproximación de pi.fuente
acos(-1)
.JavaScript: 19 bytes
Calcula el 9 º raíz de 29809 .
fuente