September 2017 Update
This commit is contained in:
parent
bba7bfd280
commit
ba8067c3b7
14570 changed files with 153136 additions and 63871 deletions
30
Task/Pi/Bc/pi.bc
Normal file
30
Task/Pi/Bc/pi.bc
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
#!/usr/bin/bc -l
|
||||
|
||||
scaleinc= 20
|
||||
|
||||
define zeropad ( n ) {
|
||||
auto m
|
||||
for ( m= scaleinc - 1; m > 0; --m ) {
|
||||
if ( n < 10^m ) {
|
||||
print "0"
|
||||
}
|
||||
}
|
||||
return ( n )
|
||||
}
|
||||
|
||||
wantscale= scaleinc - 2
|
||||
scale= wantscale + 2
|
||||
oldpi= 4*a(1)
|
||||
scale= wantscale
|
||||
oldpi= oldpi / 1
|
||||
oldpi
|
||||
while( 1 ) {
|
||||
wantscale= wantscale + scaleinc
|
||||
scale= wantscale + 2
|
||||
pi= 4*a(1)
|
||||
scale= 0
|
||||
digits= ((pi - oldpi) * 10^wantscale) / 1
|
||||
zeropad( digits )
|
||||
scale= wantscale
|
||||
oldpi= pi / 1
|
||||
}
|
||||
|
|
@ -1,41 +0,0 @@
|
|||
#include "gmp.h"
|
||||
|
||||
void agm (const mpf_t in1, const mpf_t in2, mpf_t out1, mpf_t out2) {
|
||||
mpf_add (out1, in1, in2);
|
||||
mpf_div_ui (out1, out1, 2);
|
||||
mpf_mul (out2, in1, in2);
|
||||
mpf_sqrt (out2, out2);
|
||||
}
|
||||
|
||||
int main (void) {
|
||||
mpf_set_default_prec (300000);
|
||||
mpf_t x0, y0, resA, resB, Z, var;
|
||||
|
||||
mpf_init_set_ui (x0, 1);
|
||||
mpf_init_set_d (y0, 0.5);
|
||||
mpf_sqrt (y0, y0);
|
||||
mpf_init (resA);
|
||||
mpf_init (resB);
|
||||
mpf_init_set_d (Z, 0.25);
|
||||
mpf_init (var);
|
||||
|
||||
int n = 1;
|
||||
for(int i=0; i<8; i++){
|
||||
agm(x0, y0, resA, resB);
|
||||
mpf_sub(var, resA, x0);
|
||||
mpf_mul(var, var, var);
|
||||
mpf_mul_ui(var, var, n);
|
||||
mpf_sub(Z, Z, var);
|
||||
n += n;
|
||||
agm(resA, resB, x0, y0);
|
||||
mpf_sub(var, x0, resA);
|
||||
mpf_mul(var, var, var);
|
||||
mpf_mul_ui(var, var, n);
|
||||
mpf_sub(Z, Z, var);
|
||||
n += n;
|
||||
}
|
||||
mpf_mul(x0, x0, x0);
|
||||
mpf_div(x0, x0, Z);
|
||||
gmp_printf ("%.100000Ff\n", x0);
|
||||
return 0;
|
||||
}
|
||||
30
Task/Pi/Crystal/pi.crystal
Normal file
30
Task/Pi/Crystal/pi.crystal
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
require "big_int"
|
||||
|
||||
def pi
|
||||
q, r, t, k, n, l = [1, 0, 1, 1, 3, 3].map { |n| BigInt.new(n) }
|
||||
dot_written = false
|
||||
loop do
|
||||
if 4*q + r - t < n*t
|
||||
yield n
|
||||
unless dot_written
|
||||
yield '.'
|
||||
dot_written = true
|
||||
end
|
||||
nr = 10*(r - n*t)
|
||||
n = ((10*(3*q + r)) / t) - 10*n
|
||||
q *= 10
|
||||
r = nr
|
||||
else
|
||||
nr = (2*q + r) * l
|
||||
nn = (q*(7*k + 2) + r*l) / (t*l)
|
||||
q *= k
|
||||
t *= l
|
||||
l += 2
|
||||
k += 1
|
||||
n = nn
|
||||
r = nr
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
pi { |digit_or_dot| print digit_or_dot; STDOUT.flush }
|
||||
|
|
@ -1,5 +1,19 @@
|
|||
pi_ = g(1,0,1,1,3,3) where
|
||||
g (q,r,t,k,n,l) =
|
||||
if 4*q+r-t < n*t
|
||||
then n : g (10*q, 10*(r-n*t), t, k, div (10*(3*q+r)) t - 10*n, l)
|
||||
else g (q*k, (2*q+r)*l, t*l, k+1, div (q*(7*k+2)+r*l) (t*l), l+2)
|
||||
pi_ = g (1, 0, 1, 1, 3, 3)
|
||||
where
|
||||
g (q, r, t, k, n, l) =
|
||||
if 4 * q + r - t < n * t
|
||||
then n :
|
||||
g
|
||||
( 10 * q
|
||||
, 10 * (r - n * t)
|
||||
, t
|
||||
, k
|
||||
, div (10 * (3 * q + r)) t - 10 * n
|
||||
, l)
|
||||
else g
|
||||
( q * k
|
||||
, (2 * q + r) * l
|
||||
, t * l
|
||||
, k + 1
|
||||
, div (q * (7 * k + 2) + r * l) (t * l)
|
||||
, l + 2)
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
prec = get_bigfloat_precision()
|
||||
prec = precision(BigFloat)
|
||||
spi = ""
|
||||
digit = 1
|
||||
while true
|
||||
if digit > length(spi) - 6
|
||||
prec *= 2
|
||||
set_bigfloat_precision(prec)
|
||||
setprecision(prec)
|
||||
spi = string(big(π))
|
||||
end
|
||||
print(spi[digit])
|
||||
|
|
|
|||
45
Task/Pi/Kotlin/pi.kotlin
Normal file
45
Task/Pi/Kotlin/pi.kotlin
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
// version 1.1.2
|
||||
|
||||
import java.math.BigInteger
|
||||
|
||||
val ZERO = BigInteger.ZERO
|
||||
val ONE = BigInteger.ONE
|
||||
val TWO = BigInteger.valueOf(2L)
|
||||
val THREE = BigInteger.valueOf(3L)
|
||||
val FOUR = BigInteger.valueOf(4L)
|
||||
val SEVEN = BigInteger.valueOf(7L)
|
||||
val TEN = BigInteger.TEN
|
||||
|
||||
fun calcPi() {
|
||||
var nn: BigInteger
|
||||
var nr: BigInteger
|
||||
var q = ONE
|
||||
var r = ZERO
|
||||
var t = ONE
|
||||
var k = ONE
|
||||
var n = THREE
|
||||
var l = THREE
|
||||
var first = true
|
||||
while (true) {
|
||||
if (FOUR * q + r - t < n * t) {
|
||||
print(n)
|
||||
if (first) { print ("."); first = false }
|
||||
nr = TEN * (r - n * t)
|
||||
n = TEN * (THREE * q + r) / t - TEN * n
|
||||
q *= TEN
|
||||
r = nr
|
||||
}
|
||||
else {
|
||||
nr = (TWO * q + r) * l
|
||||
nn = (q * SEVEN * k + TWO + r * l) / (t * l)
|
||||
q *= k
|
||||
t *= l
|
||||
l += TWO
|
||||
k += ONE
|
||||
n = nn
|
||||
r = nr
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun main(args: Array<String>) = calcPi()
|
||||
57
Task/Pi/PowerShell/pi-1.psh
Normal file
57
Task/Pi/PowerShell/pi-1.psh
Normal file
|
|
@ -0,0 +1,57 @@
|
|||
Function Get-Pi ( $Digits )
|
||||
{
|
||||
$Big = [bigint[]](0..10)
|
||||
|
||||
$ndigits = 0
|
||||
$Output = ""
|
||||
|
||||
$q = $t = $k = $Big[1]
|
||||
$r = $Big[0]
|
||||
$l = $n = $Big[3]
|
||||
# Calculate first digit
|
||||
$nr = ( $Big[2] * $q + $r ) * $l
|
||||
$nn = ( $q * ( $Big[7] * $k + $Big[2] ) + $r * $l ) / ( $t * $l )
|
||||
$q *= $k
|
||||
$t *= $l
|
||||
$l += $Big[2]
|
||||
$k = $k + $Big[1]
|
||||
$n = $nn
|
||||
$r = $nr
|
||||
|
||||
$Output += [string]$n + '.'
|
||||
$ndigits++
|
||||
|
||||
$nr = $Big[10] * ( $r - $n * $t )
|
||||
$n = ( ( $Big[10] * ( 3 * $q + $r ) ) / $t ) - 10 * $n
|
||||
$q *= $Big[10]
|
||||
$r = $nr
|
||||
|
||||
While ( $ndigits -lt $Digits )
|
||||
{
|
||||
While ( $ndigits % 100 -ne 0 -or -not $Output )
|
||||
{
|
||||
If ( $Big[4] * $q + $r - $t -lt $n * $t )
|
||||
{
|
||||
$Output += [string]$n
|
||||
$ndigits++
|
||||
$nr = $Big[10] * ( $r - $n * $t )
|
||||
$n = ( ( $Big[10] * ( 3 * $q + $r ) ) / $t ) - 10 * $n
|
||||
$q *= $Big[10]
|
||||
$r = $nr
|
||||
}
|
||||
Else
|
||||
{
|
||||
$nr = ( $Big[2] * $q + $r ) * $l
|
||||
$nn = ( $q * ( $Big[7] * $k + $Big[2] ) + $r * $l ) / ( $t * $l )
|
||||
$q *= $k
|
||||
$t *= $l
|
||||
$l += $Big[2]
|
||||
$k = $k + $Big[1]
|
||||
$n = $nn
|
||||
$r = $nr
|
||||
}
|
||||
}
|
||||
$Output
|
||||
$Output = ""
|
||||
}
|
||||
}
|
||||
1
Task/Pi/PowerShell/pi-2.psh
Normal file
1
Task/Pi/PowerShell/pi-2.psh
Normal file
|
|
@ -0,0 +1 @@
|
|||
[math]::pi
|
||||
2
Task/Pi/PowerShell/pi-3.psh
Normal file
2
Task/Pi/PowerShell/pi-3.psh
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
.Net digits of pi
|
||||
3.14159265358979
|
||||
32
Task/Pi/REXX/pi-2.rexx
Normal file
32
Task/Pi/REXX/pi-2.rexx
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
/*REXX program spits out decimal digits of pi (one digit at a time) until Ctrl-Break.*/
|
||||
signal on halt
|
||||
parse arg digs oFID . /*obtain optional argument from the CL.*/
|
||||
if digs=='' | digs=="," then digs= 300 /*Not specified? Then use the default.*/
|
||||
if oFID=='' | oFID=="," then oFID='PI_SPIT2.OUT' /*" " " " " " */
|
||||
numeric digits digs /*with bigger digs, spitting is slower.*/
|
||||
q=1; r=0; t=1; k=1; n=3; L=3; z=0 /*define some REXX variables. */
|
||||
dot=1 /*DOT≡a flag when a dot in pi is shown.*/
|
||||
do until z==digs; qq= q+q /* qq is a fast version of: q*2 */
|
||||
tn= t*n /* t*n is used twice (below). */
|
||||
if qq+qq+r-t < tn then do; z= z+1 /* qq+qq is faster than qq*2 */
|
||||
call charout , n
|
||||
call charout oFID, n
|
||||
if dot then do; dot=0; call charout , .
|
||||
call charout oFID, .
|
||||
end
|
||||
nr= (r - tn) * 10
|
||||
n = ((( (qq+q+r) * 10) / t) - n*10) %1
|
||||
q = q*10
|
||||
end
|
||||
else do; nr= (qq+r) * L
|
||||
tL= t*L
|
||||
n = (q * (k*7 + 2) + r*L) / tL %1
|
||||
q = q*k
|
||||
t = tL
|
||||
L = L+2
|
||||
k = k+1
|
||||
end /* %1≡fast way doing TRUNC of a number.*/
|
||||
r=nr
|
||||
end /*forever*/
|
||||
exit
|
||||
halt: say; say 'PI_SPIT2 halted via use of Ctrl-Break.'; exit
|
||||
|
|
@ -1,20 +0,0 @@
|
|||
# Calculate Pi using the Arithmetic Geometric Mean of 1 and 1/sqrt(2)
|
||||
#
|
||||
#
|
||||
# Nigel_Galloway
|
||||
# March 8th., 2012.
|
||||
#
|
||||
require 'flt'
|
||||
Flt::BinNum.Context.precision = 8192
|
||||
a = n = 1
|
||||
g = 1 / Flt::BinNum(2).sqrt
|
||||
z = 0.25
|
||||
(0..17).each{
|
||||
x = [(a + g) * 0.5, (a * g).sqrt]
|
||||
var = x[0] - a
|
||||
z -= var * var * n
|
||||
n += n
|
||||
a = x[0]
|
||||
g = x[1]
|
||||
}
|
||||
puts a * a / z
|
||||
|
|
@ -1,28 +0,0 @@
|
|||
def pi
|
||||
q, r, t, k, n, l = 1, 0, 1, 1, 3, 3
|
||||
dot = nil
|
||||
loop do
|
||||
if 4*q+r-t < n*t
|
||||
yield n
|
||||
if dot.nil?
|
||||
yield '.'
|
||||
dot = '.'
|
||||
end
|
||||
nr = 10*(r-n*t)
|
||||
n = ((10*(3*q+r)) / t) - 10*n
|
||||
q *= 10
|
||||
r = nr
|
||||
else
|
||||
nr = (2*q+r) * l
|
||||
nn = (q*(7*k+2)+r*l) / (t*l)
|
||||
q *= k
|
||||
t *= l
|
||||
l += 2
|
||||
k += 1
|
||||
n = nn
|
||||
r = nr
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
pi {|digit| print digit; $stdout.flush}
|
||||
|
|
@ -1,26 +1,26 @@
|
|||
func pi(callback) {
|
||||
var (q, r, t, k, n, l) = (1, 0, 1, 1, 3, 3);
|
||||
var (q, r, t, k, n, l) = (1, 0, 1, 1, 3, 3)
|
||||
loop {
|
||||
if ((4*q + r - t) < n*t) {
|
||||
callback(n);
|
||||
static _dot = callback('.');
|
||||
var nr = 10*(r-n*t);
|
||||
n = (int((10*(3*q + r)) / t) - 10*n);
|
||||
q *= 10;
|
||||
r = nr;
|
||||
callback(n)
|
||||
static _dot = callback('.')
|
||||
var nr = 10*(r - n*t)
|
||||
n = ((10*(3*q + r)) // t - 10*n)
|
||||
q *= 10
|
||||
r = nr
|
||||
}
|
||||
else {
|
||||
var nr = ((2*q + r) * l);
|
||||
var nn = int((q*(7*k + 2) + r*l) / (t*l));
|
||||
q *= k;
|
||||
t *= l;
|
||||
l += 2;
|
||||
k += 1;
|
||||
n = nn;
|
||||
r = nr;
|
||||
var nr = ((2*q + r) * l)
|
||||
var nn = ((q*(7*k + 2) + r*l) // (t*l))
|
||||
q *= k
|
||||
t *= l
|
||||
l += 2
|
||||
k += 1
|
||||
n = nn
|
||||
r = nr
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
STDOUT.autoflush(1);
|
||||
pi(func(digit){ print digit });
|
||||
|
||||
STDOUT.autoflush(true)
|
||||
pi(func(digit){ print digit })
|
||||
|
|
|
|||
24
Task/Pi/Zkl/pi.zkl
Normal file
24
Task/Pi/Zkl/pi.zkl
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
var [const] BN=Import("zklBigNum"),
|
||||
one=BN(1), two=BN(2), three=BN(3), four=BN(4), seven=BN(7), ten=BN(10);
|
||||
|
||||
fcn calcPiDigits{
|
||||
reg q=BN(1), r=BN(0), t=BN(1), k=BN(1), n=BN(3), l=BN(3);
|
||||
first:=True; N:=0;
|
||||
while(True){ if((N+=1)==1000){ GarbageMan.collect(); N=0; } // take a deep breath ...
|
||||
if(four*q + r - t < n*t){
|
||||
n.print(); if(first){ print("."); first=False; }
|
||||
nr:=(r - n*t).mul(ten); // 10 * (r - n * t);
|
||||
n=(three*q).add(r).mul(ten) // ((10*(3*q + r))/t) - 10*n;
|
||||
.div(t).sub(ten*n);
|
||||
q.mul(ten); // q *= 10;
|
||||
r=nr;
|
||||
}else{
|
||||
nr:=(two*q).add(r).mul(l); // (2*q + r)*l;
|
||||
nn:=(q*seven).mul(k).add(two) // (q*(7*k + 2) + r*l)/(t*l);
|
||||
.add(r*l).div(t*l);
|
||||
q.mul(k); t.mul(l); // q*=k; t*=l;
|
||||
l.add(two); k.add(one); // l+=2; k++;
|
||||
n=nn; r=nr;
|
||||
}
|
||||
}
|
||||
}();
|
||||
Loading…
Add table
Add a link
Reference in a new issue