¿Cómo puedo generar Pi a un número dado de lugares decimales desde un script?


Respuestas:


19

Suponiendo que tiene la utilidad bc(Calculadora básica) en su sistema, puede usar el siguiente comando y un poco de matemáticas antiguas para calcular π a 10,000 lugares decimales:

echo "scale=10000; 4*a(1)" | bc -l

Esto probablemente tomará bastante tiempo en completarse para 10,000 lugares decimales.

Desglosando el comando ...

  • scale = 10000 : esto especifica el número de decimales que se utilizarán para el resultado
  • 4 * a (1) : devuelve el arcotangente de 1 [que equivale a 45 °: 45 x (π / 180) o ¼π] y luego se multiplica por 4 para obtener π.
  • bc -l : canaliza la cadena de función completa en la utilidad bc , -l especifica que se cargue la biblioteca matemática estándar que se necesita para la función arcotangente, a () .

Para envolver esto en un script como lo especifica en su pregunta, use su editor favorito para escribir lo siguiente y guárdelo como generatepi.sh:

#!/bin/bash
echo "scale=$1; 4*a(1)" | bc -l

Luego, desde un terminal, use chmod +x generatepi.shdesde la carpeta donde guardó el archivo, lo que le otorgará derechos de ejecución del script. La sintaxis es entonces generatepi.sh [number of places]. Tenga en cuenta que esto usa una forma muy básica de manejar parámetros y no validaría la entrada, así que asegúrese de pasar solo enteros positivos como parámetro.

La mayoría de los sistemas Linux deberían tener, bcpero es posible que deba instalarlo en algunos casos (por ejemplo, apt-get en Ubuntu, emerge en Gentoo, etc.). También hay un puerto de bc para Windows .


hay calculadoras pi nativas para windows - los overclockers las usan para pruebas de estabilidad
Journeyman Geek

~ 3 minutos en mi máquina, bastante inútil en un script. +1 aunque por usar bc.
cYrus

Creo que la "b" en "bc" significa "Berkeley" en lugar de "Banco".
user1364368

Gracias. Actualizado a 'calculadora básica' basado en en.wikipedia.org/wiki/Bc_(programming_language)
Gaff
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.