g | x | w | all
Bytes Lang Time Link
151Java 10201021T151500ZKevin Cr
015Wolfram Language Mathematica250527T091853ZLucenapo
024APLNARS240104T134357ZRosario
053JavaScript240826T115211ZShaggy
083Python 2140104T033117ZSoulman
9684Scala 3240106T061242Z138 Aspe
144Fortran201023T095440Zroblogic
044Raku220930T205620ZSean
020APL NARS2000201125T204229Zuser
024Husk201021T141918ZDominic
02005AB1E201021T154514ZKevin Cr
021Pyth141023T235500Zizzyg
080Axiom170424T073822Zuser5898
014PARI/GP150204T164501ZCharles
050Mathematica140226T125505Zswish
034Mathematica140226T032721ZStack Tr
017Mathematica110313T011131ZQuixotic
029Golfscript110204T134121Zgnibbler
nan110204T152952ZAlexandr
136Python3110204T144744ZAlexandr

Java 10, 208 207 206 193 176 155 151 bytes

n->{var t=java.math.BigInteger.TEN.pow(499);var p=t=t.add(t);for(int i=1656;i>0;)p=t.add(p.multiply(t.valueOf(i)).divide(t.valueOf(i-~i--)));return p;}

-18 bytes thanks to @ceilingcat.
-17 bytes thanks to @jeJe.
-21 bytes thanks to @Neil reverting the algorithm.

Try it online.

Or as full program (199 bytes):

interface M{static void main(String[]a){var t=java.math.BigInteger.TEN.pow(499).shiftLeft(1);var p=t;for(int i=1656;i>0;)p=t.add(p.multiply(t.valueOf(i)).divide(t.valueOf(i-~i--)));System.out.print(p);}}

Try it online.

Wolfram Language (Mathematica), 16 15 bytes

Log[-1]/I~N~500

Try it online!

APL(NARS), 24 chars

{⎕fpc←!7⋄¯2↓502⍕4×0∘○∫1}

I searched one integral that return a π near number... I found the answer https://codegolf.stackexchange.com/a/22172/120560 helpfull... Above integral 0∘○∫1 should be the integral sqrt(1-x^2) in 0..1 that would be π/4. Here there is a builtin function 0○⍵ that return √1-⍵×⍵. A little long solution using integrals is this.

{⎕fpc←!7⋄¯2↓502⍕4×{÷1+⍵*2}∫1}

but it would be 29 chars even if more clear...

It seems integration by default use only the floats controlled from ⎕fpc. It seems that ⎕fpc←!7 change ⎕fpc only inside the function. Until +-777 digits of Pi calculate with integrals it seems ok, after not.

JavaScript, 53 bytes

Port of Kevin's Java solution.

f=(p=t=10n**500n*2n,i=1656n)=>i?f(t+p*i/(i-~i),--i):p

Try it online!

Python 2, 83 bytes

P=0
B=10**500
i=1666
while i:d=2*i+1;P=(P*i%B+(P*i/B+3*i)%d*B)/d;i-=1
print'3.%d'%P

Try it online!

Scala 3, 96 84 bytes

A port of @Kevin Cruijssen's Java 10 answer in Scala.

Saved 12 bytes thanks to @ceilingcat


Golfed version. Attempt This Online!

_=>{val t=BigInt(10).pow(499)*2;var p=t;for i<- 1656 to 1 by-1 do p=t+p*i/(2*i+1);p}

Ungolfed version. Attempt This Online!

_ => {
  val t = BigInt(10).pow(499) << 1
  var p = t
  var i = 1656
  while (i > 0) {
    val temp = 2 * i + 1
    p = t + (p * BigInt(i) / temp)
    i -= 1
  }
  p
}

Fortran, 154 144 bytes

Mangled the rosetta code solution. Saved lots of bytes using implicit integers i j k l m n, print instead of write, and shuffling things around.

Try it online! 154 bytes

integer::v(3350)=2;x=1E5;j=0;do n=1,101;do l=3350,1,-1
m=x*v(l)+i*l;i=m/(2*l-1);v(l)=m-i*(2*l-1);enddo
k=i/x;print'(I5.5)',j+k;j=i-k*x;enddo;end

Raku, 44 bytes

(2.FatRat,{++$*$_/(2*++$+1)}...*)[^1658].sum

Try it online!

A search for a series that quickly converges to pi led to this Math StackExchange answer, which I implemented in Raku. The series consists of FatRats, which is Raku's unlimited-precision rational number type. A little calculation and trial and error showed that 1,658 terms are sufficient to obtain 500 decimal places of accuracy.

APL (NARS2000), 20 bytes

{2+⍵×⍺÷1+⍨2×⍺}/⍳7e3x

I haven't been able to test this, but here's a version in Dyalog APL. The only difference between them is the suffix "x", which is used for rational numbers in NARS2000 but is not available in Dyalog (or other variants available online, as far as I know).

It's based on the pi = 2 + 1/3*(2 + 2/5*(2 + 3/7*(2 + 4/9*(2 + ...)))) formula in the comments under the accepted Golfscript answer.

Husk, 28 25 24 bytes

i*!500İ⁰ΣG*2mṠ/o!İ1→ḣ□70

Try it online!

Calculates the value of pi as a rational number using the first 5000 terms of the infinite series 2 + 1/3*(2 + 2/5*(2 + 3/7*(2 + 4/9*(2 + ...)))), and then extracts the first 500 digits.

The code to calculate the value of pi from a specified number of terms is only 13 bytes (ΣG*2mṠ/o!İ1→ḣ):

ΣG*2mṠ/o!İ1→ḣ
Σ                       # the sum of
 G*2                    # the cumulative product, starting at 2, of
    m                   # mapping the following function to all terms of 
            ḣ           # series from 1 to ... (whatever number is specified)
     Ṡ/                 # divide by x
       o!  →            # element at index -1
         İ1             # of series of odd numbers

Unfortunately, we then need to waste 3 bytes specifying the number of terms to use:

□70                     # 70^2 = 4900

And then 8 more bytes converting the rational number (expressed as a fraction) into its digits in decimal form:

i*!500İ⁰            
i                       # integer value of
 *                      # multiplying by 
  !500                  # 500th element of
      İ⁰                # series of powers of 10

05AB1E, 20 bytes

₄°·D.ΓN>*N·3+÷}O+₄;£

Port of my Java answer (with the 503 replaced with 1000 - anything \$\geq503\$ is fine to output the first 500 digits accurately with this approach).

Try it online or verify it's equal to the first 500 digits of PI using the builtin žs.

Explanation:

₄°              # Push 10**1000
  ·             # Double it to 2e1000
   D            # Duplicate it
    .Γ          # Loop until the result no longer changes,
                # collecting all intermediate results
                # (excluding the initial value unfortunately)
      N>        #  Push the 0-based loop-index, and increase it by 1 to make it 1-based
        *       #  Multiply this 1-based index to the current value
         N·     #  Push the 0-based index again, and double it
           3+   #  Add 3 to it
             ÷  #  Integer-divide the (index+1)*value by this (2*index+3)
     }O         # After the cumulative fixed-point loop: sum all values in the list
       +        # Add the 2e1000 we've duplicated, which wasn't included in the list
        ₄;      # Push 1000, and halve it to 500
          £     # Leave the first 500 digits of what we've calculated
                # (after which it is output implicitly as result)

Pyth, 21

u+/*GHhyHy^T500r^3T1Z

Uses this algorithm: pi = 2 + 1/3*(2 + 2/5*(2 + 3/7*(2 + 4/9*(2 + ...)))) found in the comments of the Golfscript answer.

Axiom, 80 bytes

digits(503);v:=1./sqrt(3);6*reduce(+,[(-1)^k*v^(2*k+1)/(2*k+1)for k in 0..2000])

for reference https://tuts4you.com/download.php?view.452; it would be an approssimation to 6*arctg(1/sqrt(3))=%pi and it would use serie expansion for arctg

  3.1415926535 8979323846 2643383279 5028841971 6939937510 5820974944 592307816
  4 0628620899 8628034825 3421170679 8214808651 3282306647 0938446095 505822317
  2 5359408128 4811174502 8410270193 8521105559 6446229489 5493038196 442881097
  5 6659334461 2847564823 3786783165 2712019091 4564856692 3460348610 454326648
  2 1339360726 0249141273 7245870066 0631558817 4881520920 9628292540 917153643
  6 7892590360 0113305305 4882046652 1384146951 9415116094 3305727036 575959195
  3 0921861173 8193261179 3105118548 0744623799 6274956735 1885752724 891227938
  1 8301194913 01

PARI/GP, 14

\p500
acos(-1)

You can avoid trig by replacing the second line with

gamma(.5)^2

or

(6*zeta(2))^.5

or

psi(3/4)-psi(1/4)

or

4*intnum(x=0,1,(1-x^2)^.5)

or

sumalt(k=2,(-1)^k/(2*k-3))*4

Mathematica - 50

½ = 1/2; 2/Times @@ FixedPointList[(½ + ½ #)^½~N~500 &, ½^½]

Mathematica (34 chars): (without "cheating" with trig)

N[2Integrate[[1-x^2]^.5,-1,1],500]

So, to explain the magic here:
Integrate[function, lower, upper] gives you the area under the curve "function" from "lower" to "upper". In this case, that function is [1-x^2]^.5, which is a formula that describes the top half of a circle with radius 1. Because the circle has a radius of 1, it does not exist for values of x lower than -1 or higher than 1. Therefore, we are finding the area of half of a circle. When we multiply by 2, then we get the area inside of a circle of radius 1, which is equal to pi.

Mathematica (17 bytes)

N[ArcCos[-1],500]

Proof of validity.

Golfscript - 29 chars

6666,-2%{2+.2/@*\/9)499?2*+}*

I will post analysis later

bc -l (22 = 5 command line + 17 program)

scale=500
4*a(1)

Python3 136

Uses Madhava's formula.

from decimal import *
D=Decimal
getcontext().prec=600
p=D(3).sqrt()*sum(D(2-k%2*4)/3**k/(2*k+1)for k in range(1100))
print(str(p)[:502])

Python3 164

Uses this formula.

from decimal import *
D=Decimal
getcontext().prec=600
p=sum(D(1)/16**k*(D(4)/(8*k+1)-D(2)/(8*k+4)-D(1)/(8*k+5)-D(1)/(8*k+6))for k in range(411))
print(str(p)[:502])