PyPrintPi en un frambuesa Pi (12 / 23 paso)

Paso 12: Codificación fórmula de Gauss

En nuestro paso anterior encontramos la fórmula:

Π/4=12*arctan(1/18) + 8*arctan(1/57) - 5*arctan(1/239)

podemos fácilmente convertir esto en una función en python si asumimos que hemos definido una función arctan:

Ahora necesitamos crear una función arctan. El método más rápido para implementar sería utilizar la fórmula que vimos en el paso 9:

arctan(x) = x - (x³/3) + (x⁵/5) - (x⁷/7) + (x⁹/9) - (x¹¹/11)...

sin embargo ver como sólo estamos calcular arctans de números en forma de 1 / x tiene más sentido para redefinir la fórmula como:

arctan(1/x) = (1 / x)-(1/3 x ³) + (1/5x⁵) - (1/7x⁷) + (1/9x⁹) - (1/11 x ¹¹)...

Esto nos da la siguiente función en Python:

Esta función es un poco más avanzada que las anteriores funciones no requiere el usuario introducir cuantas iteraciones a ejecutar. En cambio se ve en el valor de getcontext () .prec y busca el valor más pequeño que puede distinguir el programa Python desde cero (por ejemplo si getcontext () .prec = 2 el valor más pequeño que puede distinguir Python desde 0 es 0,1).

Luego compara el valor del último término en la secuencia: si es menor que el valor más pequeño que puede distinguir python desde 0 y no tiene ningún sentido continuar por lo que el programa se detiene.

Si juntamos las dos funciones tenemos el siguiente programa (gauss_pi_method.py):

Si ejecuta esto para encontrar 10.000 dígitos de π debe tomar menos de un minuto. En mi equipo tardó 17 segundos. Es mucho mejor que el anterior mejor programa que tenía, el uno basado en el método del polígono, que tuvo 43 segundos en mi computadora para calcular 100 dígitos de π.

Sin embargo podemos hacer mucho mejor usando la misma función para calcular π si podríamos calcular arctan(1/x) más rápidamente.

Afortunadamente, Euler se subió con una manera de hacer precisamente eso:

arctan(1/x) = (x / (1 + x²)) + ((2 * x) / (3*(1+x²)²)) + ((2 * 4 * x) / (3*5*(1+x²)³)) + ((2 * 4 * 6 * x) / (3*5*7*(1+x²)⁴)) +...

El enésimo término en esta serie está dada por la función f (n):

f (n) = f(n-1) * (2 * n) / ((2*n+1)*(1+x²))

donde el primer término es (x / (1 + x²))

Con el fin de que el código funcione más rápido podemos calcular 1 + x² antes del bucle, así que sólo tenemos que calcular una vez. El código actualizado (gauss_pi_method_accelerated_arctan.py) es:

Este código tuvo poco más de medio segundo para calcular π a 10.000 dígitos, que es aproximadamente 30 veces más rápido que antes!

Hay un truco aseado para hacer el código ejecutar aún más rápido. Hasta ahora hemos estado usando la biblioteca decimal en Python. Sin embargo, si hacemos los cálculos con enteros todo será mucho más rápido. Para ello primero multiplicamos el valor inicial por una gran potencia de 10 y más tarde, cuando queremos utilizar el resultado, dividirlo por ese mismo poder de 10. Aquí es cómo el código se verá (gauss_pi_method_fixed_point.py):

Esta versión del código calcula 10.000 decimales de π en sólo 0,26 segundos, que es casi dos veces tan rápido como el método anterior!

Artículos Relacionados

Internet habilitado frambuesa Pi alimentador del animal doméstico

Internet habilitado frambuesa Pi alimentador del animal doméstico

Se trata de un comedero de perro con un Raspberry Pi.Si quieres:una manera fácil de alimentar a su perro grandehacer un seguimiento de cuando te alimentasCuánto control y cuánto alimentay ser capaz de alimentar remotamente a través de correo electrón
Frambuesa Pi 3 modelo B: Guía de un principiante

Frambuesa Pi 3 modelo B: Guía de un principiante

Una versión más reciente del Raspberry Pi, Frambuesa Pi 3 modelo B ha sido lanzada recientemente. Lo que lo hace diferente de otros modelos anteriores son:Un procesador de 64 bits más rápido corriendo a 1,2 GHzA bordo de Bluetooth de baja energía (BL
Cómo utilizar y Arduino shield con la frambuesa Pi

Cómo utilizar y Arduino shield con la frambuesa Pi

Adición de Arduino shields a la frambuesa Pi pueden ser un dolor muy grande. Uno termina teniendo un lío de cables corriendo y configuración del software es un reto en la su propia derecha.Aquí le damos una solución sencilla para empezar a utilizar t
Programación un Arduino de frambuesa Pi

Programación un Arduino de frambuesa Pi

Aprenda cómo instalar el IDE de Arduino en la Raspberry Pi para que pueda escribir y subir programas a un Arduino.Elementos necesarios:1 x frambuesa Pi1 x ArduinoAdemás, lo cables son necesarios como USB para Arduino.Paso 1: Instalación/configSuponie
Frambuesa Pi - comunicación de Arduino Serial

Frambuesa Pi - comunicación de Arduino Serial

En este proyecto, vamos a hacer una comunicación entre Arduino y frambuesa Pi que transfieren información vital mediante el envío de bits de datos uno a la vez.Serie de comunicaciones es esenciales para cada Micro controladores para la comunicación e
Máquina CNC de frambuesa Pi

Máquina CNC de frambuesa Pi

Mi amigo y yo pensamos sobre la construcción de una máquina CNC por un tiempo. Pero no queremos que sea sólo una máquina de CNC ordinario. Hemos querido hacer una máquina única que podría tener atributos muy singulares. Nos propusimos hacer una máqui
Caso de Pi CNC frambuesa

Caso de Pi CNC frambuesa

Le mostrará cómo hice mi primer proyecto de carpintería en mi máquina cnc diy. Es una caja de madera (madera de contrachapado de 8mm) con juntas de madera para un Pi de frambuesa equipado con un escudo de Protoneer CNC (arduino nano, fuente de alimen
Monitor de bebé de frambuesa Pi con Splunk

Monitor de bebé de frambuesa Pi con Splunk

Estos pasos le enseñará cómo montar los componentes necesarios para que un monitor de bebé de Raspberry Pi y recoger los datos en Splunk, un lector de registro y herramienta de análisis, programar los datos de una manera significativa. Al final usted
El centro de automatización de frambuesa Pi-Arduino-SignalR hogar

El centro de automatización de frambuesa Pi-Arduino-SignalR hogar

Después de un par de mi preludio IBLEs publicado aquí y aquí, este proyecto toma el primer paso hacia la construcción de una versión básica de un funcional Inicio Centro de automatización.He utilizado varias tecnologías diferentes en un esfuerzo para
CupBots - 3D plataforma robótica impresa para Arduino y frambuesa Pi

CupBots - 3D plataforma robótica impresa para Arduino y frambuesa Pi

Aquí es un proyecto de robótica de gran fin de semana para emprender con amigos o gente en su espacio local del fabricante. Usted necesitará una impresora 3D práctico 3D impresión los archivos STL adjuntan como parte de los pasos a continuación y una
Frambuesa Pi música dedos

Frambuesa Pi música dedos

Creación de música es siempre divertido, pero que hace con su propio instrumento musical DIY es mucho mejor!!Tanto si eres un músico profesional en busca de ese nuevo instrumento siguiente intentar o un aficionado entusiasta que tiene conocimientos b
Instalación de Audio movimiento PIR P.I.R.M.A frambuesa Pi

Instalación de Audio movimiento PIR P.I.R.M.A frambuesa Pi

PIR + Python + frambuesa Pi = instalación Audio movimiento accionado.Historia del proyecto:Mi padre es un Comisario de un pequeño museo sobre la historia de nuestro pueblo, Suiza de Elgg. Él tenía la idea de que una pieza de música se reproduce cuand
Star Wars y Star Trek en Minecraft con frambuesa mermelada Mod

Star Wars y Star Trek en Minecraft con frambuesa mermelada Mod

Voy a explicar cómo hacer (a) fácilmente Star Wars y Star Trek (y otros) 3D modelos en Minecraft y (b) volar una nave espacial en Minecraft (¡ o incluso con otra entidad, como un murciélago o un zombi, volar!), usando los scripts de python muestra in
Internet de las cosas con frambuesa Pi - 1

Internet de las cosas con frambuesa Pi - 1

Cuando yo era nuevo en IOT (Internet de las cosas), vi que había apenas cualquier tutoriales que fueron lo suficientemente simples como para un principiante comprender y probar. Había a mucha jerga técnica, o el hardware era demasiado complejo.Ahora