Pi está equivocado
Un método común para calcular pi es lanzar "dardos" en una caja 1x1 y ver qué tierra en el círculo de la unidad en comparación con el total arrojado:
loop
x = rand()
y = rand()
if(sqrt(x*x + y*y) <= 1) n++
t++
pi = 4.0*(n/t)
Escriba un programa que parezca que debería calcular correctamente pi (utilizando este u otros métodos comunes de cálculo de pi) pero en su lugar calcula tau (tau = 2 * pi = 6.283185307179586 ...). Su código debe producir al menos los primeros 6 decimales: 6.283185
El ganador es coronado el 6 de junio (una semana a partir de hoy).
popularity-contest
underhanded
pi
Kyle Kanos
fuente
fuente
1
pero regresa2
. ¿A quién estamos engañando aquí?Respuestas:
JavaScript
Ayuda, estoy atrapado en una fábrica de universos y no estoy seguro de lo que estoy haciendo.
Math.atan2
se supone que devuelve pi con buenos valores, ¿verdad?Math.atan2(0, -0)
devuelve pi, por lo que si lo resto y lo agrego, aún debería tener pi.fuente
π - (-π)
>>> 0 === -0 ;true ;>>> Math.atan2(0, 0) ;0 ;>>> Math.atan2(0, -0) ;3.141592653589793
BASIC
(Más específicamente, Chipmunk Basic )
Utiliza una serie infinita descubierta por Nilakantha Somayaji en el siglo XV:
Salida
Si no puede entender lo que está sucediendo, aquí hay algunos consejos:
y
fuente
i
es igualfalse
? ¿Y luego le agregas2
? ¿¿¿Y funciona???i == false
cual es similar ai == 0
. El punto es que el valor inicial para el acumuladorpi
no es 0 ...false + 2 == 2
: Dbool
tipo, y utiliza un valor0
distinto de cero para representarfalse
y de formatrue
selectiva. No es que sea elegante, pero bueno, así es como funciona.C - La longitud de la mitad de un círculo unitario
Una forma de calcular π es simplemente para medir la distancia que el punto
(1, 0)
se desplaza cuando se gira alrededor del origen a(-1, 0)
ya que será la mitad de la circunferencia de un círculo de la unidad (que es 2π ).Sin embargo, no hay
sin(x)
ocos(x)
es necesario ya que esto se puede hacer mediante la intensificación de todo el camino alrededor del origen y la adición de la distancia al punto viaja para cada paso . Cuanto menor sea el tamaño de cada paso, más precisa será π .Nota: Los pasos finalizarán cuando y esté por debajo de cero (que es justo cuando pasa
(-1, 0)
).Da el siguiente resultado:
fuente
length
macro le falta un sqrt. ¿Eso es lo que se pretende?x
yy
también se intercambian entre la definición y la llamada (sin efecto)sqrt
se omitió accidentalmente para que el valor de pi se imprimiera como 6,28 ... ¡También +1 por notarx
yy
lo que no hice!do
(Esto terminó siendo más largo de lo previsto, pero lo publicaré de todos modos ...)
En el siglo XVII, Wallis publicó una serie infinita para Pi:
(Consulte Nuevos productos Infinitos de tipo Wallis y catalán para π, e y √ (2 + √2) para obtener más información)
Ahora, para calcular Pi, primero debemos multiplicar por dos para factorizar el denominador:
Mi solución luego calcula las series infinitas para Pi / 2 y dos y luego multiplica los dos valores juntos. Tenga en cuenta que los productos infinitos son increíblemente lentos para converger al calcular los valores finales.
salida:
fuente
Java - Serie Nilakantha
La serie Nilakantha se da como:
Entonces, para cada término, el denominador se construye multiplicando enteros consecutivos, con el comienzo aumentando en 2 cada término. Observe que suma / resta términos alternos.
Después de quinientos términos, obtenemos una estimación razonable de pi:
fuente
C ++: Madhava de Sangamagrama
Esta serie infinita ahora se conoce como Madhava-Leibniz :
Comience con la raíz cuadrada de 48 y multiplíquela por el resultado de la suma de (-3) -k / (2k + 1). Muy sencillo y sencillo de implementar:
Salida:
fuente
Python: una alternativa a la serie Nilakantha
Esta es otra serie infinita para calcular pi que es bastante fácil de entender.
Para esta fórmula, toma 6 y comienza a alternar entre sumar y restar fracciones con numeradores de 2 y denominadores que son el producto de dos enteros consecutivos y su suma. Cada fracción posterior comienza a aumentar su conjunto de enteros en 1. Realice esto incluso unas pocas veces y los resultados se acercarán bastante a pi.
lo que da 6.283185.
fuente
Math.h:
Salida: 6.28
#include "Math.h" no es lo mismo que #include, pero con solo mirar el archivo principal, casi nadie pensaría en verificarlo. Obvio, quizás, pero un problema similar apareció en un proyecto en el que estaba trabajando y no se detectó durante mucho tiempo.
fuente