Apéry's constant: Difference between revisions

Content deleted Content added
Aspen138 (talk | contribs)
Add PARI/GP implementation
Zeddicus (talk | contribs)
(10 intermediate revisions by 4 users not shown)
Line 187:
1.2020569031595942853997381615114499907649862923404988817922715553418382057863130901864558736093352581
</syntaxhighlight>
 
=={{header|jq}}==
'''Adapted from [[#Wren|Wren]]'''
 
'''Works with gojq, the Go implementation of jq'''
 
In this entry, gojq is used as it supports unbounded-precision integer arithmetic.
 
A copy of the "rational" module may be found at
[[:Category:jq/rational.jq]].
<syntaxhighlight lang="jq">
include "rational" {search: "."}; # see comment above
 
def factorial:
reduce range(2; .+1) as $i (1; . * $i);
 
def apery($n):
reduce range (1; $n+1) as $k ( r(0;1);
radd(.; r(1; $k | . * . * .)))
| "First \($n) terms of ζ(3) truncated to 100 decimal places (accurate to 6 decimal places):",
r_to_decimal(100);
 
def markov($n):
{fact: 1,
fact2: 1,
sign: -1,
sum: r(0;1)
}
| reduce range (1; $n + 1) as $k (.;
.sign *= -1
| .fact *= $k
| (.fact * .fact * .sign) as $num
| .mult = 2 * $k * (2*$k - 1)
| .fact2 *= .mult
| ($k | .*.*.) as $cube
| (.fact2 * $cube) as $den
| .sum |= radd(. ; r($num; $den) ) )
| .sum |= rmult(.; r(5; 2))
| "First \($n) terms of Markov / Apéry representation truncated to 100 decimal places:",
(.sum | r_to_decimal(100));
 
def wedeniwski($n):
def cube: .*.*.;
{fact: 1,
fact2: 1,
sign: -1,
sum: r(0;1),
mult: 1
}
| reduce range (0; $n) as $k (.;
.sign *= -1
| if $k > 0
then .fact *= $k
| .mult = 2 * $k * (2*$k - 1)
| .fact2 *= .mult
end
| (.fact2 * (2*$k + 1)) as $fact3
| (.sign * ($fact3|cube) * (.fact2|cube) * (.fact|cube)) as $num
| ($k * $k) as $k2
| ($k2 * $k) as $k3
| ($k3 * $k) as $k4
| ($k4 * $k) as $k5
| (126392*$k5 + 412708*$k4 + 531578*$k3 + 336367*$k2 + 104000*$k + 12463) as $tmp
| ($num * $tmp) as $num
| ( (3*$k + 2 | factorial) * (4*$k + 3 | factorial | cube ) ) as $d
| .sum |= radd(.; r($num; $d)) )
| .sum |= r( .n; 24 * .d )
| "First \($n) terms of Wedeniwski representation truncated to 100 decimal places:",
(.sum | r_to_decimal(100));
 
"Actual value to 100 decimal places:",
"1.2020569031595942853997381615114499907649862923404988817922715553418382057863130901864558736093352581",
apery(1000),
markov(158),
wedeniwski(20)
</syntaxhighlight>
{{output}}
<pre>
Actual value to 100 decimal places:
1.2020569031595942853997381615114499907649862923404988817922715553418382057863130901864558736093352581
First 1000 terms of ζ(3) truncated to 100 decimal places (accurate to 6 decimal places):
1.2020564036593442854830714115115999903483212709031775135036540966118572571921400836130084123260473111
First 158 terms of Markov / Apéry representation truncated to 100 decimal places:
1.2020569031595942853997381615114499907649862923404988817922715553418382057863130901864558736093352581
First 20 terms of Wedeniwski representation truncated to 100 decimal places:
1.2020569031595942853997381615114499907649862923404988817922715553418382057863130901864558736093352581
</pre>
 
=={{header|Julia}}==
Line 256 ⟶ 343:
</syntaxhighlight>
{{out}}
<div style=background-color:#f8f9fa;padding:1em;white-space:pre-wrap;font-family:monospace;line-height:1.2em;>Apéry's constant via Mathematica's Zeta:
<pre>
Apéry's constant via Mathematica's Zeta:
1.2020569031595942853997381615114499907649862923404988817922715553418382057863130901864558736093352581
 
Apéry's constant via reciprocal cubes:
Apéry's constant via reciprocal cubes (accurate to 6 decimal places):
1.2020564036593442854830714115115999903483212709031775135036540966118572571921400836130084123260473112
 
1.202056<span style=color:red;>4036593442854830714115115999903483212709031775135036540966118572571921400836130084123260473112</span>
 
Apéry's constant via Markov's summation:
1.2020569031595942853997381615114499907649862923404988817922715553418382057863130901864558736093352581
 
Apéry's constant via Wedeniwski's summation:
1.2020569031595942853997381615114499907649862923404988817922715553418382057863130901864558736093352581
</prediv>
 
=={{header|Nim}}==
Line 427 ⟶ 517:
Ugh. If you ran this on the James Webb, you might just be able to pick out a faint small print outline of the word "elegant".<br>
Still, at least it is not like you do this sort of thing every day... and I got to fix a couple of bugs in my mpfr.js code.
<!--<syntaxhighlight lang="phix">(phixonline)-->
<syntaxhighlight lang="phix">
<span style="color: #008080;">with</span> <span style="color: #008080;">javascript_semantics</span>
with javascript_semantics
<span style="color: #7060A8;">requires</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"1.0.2"</span><span style="color: #0000FF;">)</span> <span style="color: #000080;font-style:italic;">-- (missing mpfr_ui_pow_ui() and bug in mpfr_mul_d(), both in mpfr.js)</span>
requires("1.0.2") -- (missing mpfr_ui_pow_ui() and bug in mpfr_mul_d(), both in mpfr.js)
<span style="color: #008080;">include</span> <span style="color: #004080;">mpfr</span><span style="color: #0000FF;">.</span><span style="color: #000000;">e</span>
include mpfr.e
<span style="color: #7060A8;">mpfr_set_default_precision</span><span style="color: #0000FF;">(-</span><span style="color: #000000;">100</span><span style="color: #0000FF;">)</span>
mpfr_set_default_precision(-100)
<span style="color: #004080;">mpfr</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">d</span><span style="color: #0000FF;">,</span><span style="color: #000000;">a</span><span style="color: #0000FF;">,</span><span style="color: #000000;">w</span><span style="color: #0000FF;">,</span><span style="color: #000000;">t</span><span style="color: #0000FF;">}</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">mpfr_inits</span><span style="color: #0000FF;">(</span><span style="color: #000000;">4</span><span style="color: #0000FF;">)</span>
mpfr {d,a,w,t} = mpfr_inits(4)
<span style="color: #004080;">mpz</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">z</span><span style="color: #0000FF;">,</span><span style="color: #000000;">pk</span><span style="color: #0000FF;">}</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">mpz_inits</span><span style="color: #0000FF;">(</span><span style="color: #000000;">2</span><span style="color: #0000FF;">)</span>
mpz {z,pk} = mpz_inits(2)
<span style="color: #008080;">for</span> <span style="color: #000000;">k</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span> <span style="color: #008080;">to</span> <span style="color: #000000;">1000</span> <span style="color: #008080;">do</span>
for k=1 to 1000 do
<span style="color: #7060A8;">mpfr_ui_pow_ui</span><span style="color: #0000FF;">(</span><span style="color: #000000;">t</span><span style="color: #0000FF;">,</span><span style="color: #000000;">k</span><span style="color: #0000FF;">,</span><span style="color: #000000;">3</span><span style="color: #0000FF;">)</span>
mpfr_ui_pow_ui(t,k,3)
<span style="color: #7060A8;">mpfr_si_div</span><span style="color: #0000FF;">(</span><span style="color: #000000;">t</span><span style="color: #0000FF;">,</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">t</span><span style="color: #0000FF;">)</span>
mpfr_si_div(t,1,t)
<span style="color: #7060A8;">mpfr_add</span><span style="color: #0000FF;">(</span><span style="color: #000000;">d</span><span style="color: #0000FF;">,</span><span style="color: #000000;">d</span><span style="color: #0000FF;">,</span><span style="color: #000000;">t</span><span style="color: #0000FF;">)</span>
mpfr_add(d,d,t)
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
end for
 
<span style="color: #008080;">for</span> <span style="color: #000000;">k</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span> <span style="color: #008080;">to</span> <span style="color: #000000;">158</span> <span style="color: #008080;">do</span>
for k=1 to 158 do
<span style="color: #7060A8;">mpz_fac_ui</span><span style="color: #0000FF;">(</span><span style="color: #000000;">z</span><span style="color: #0000FF;">,</span><span style="color: #000000;">k</span><span style="color: #0000FF;">)</span>
mpz_fac_ui(z,k)
<span style="color: #7060A8;">mpz_mul</span><span style="color: #0000FF;">(</span><span style="color: #000000;">z</span><span style="color: #0000FF;">,</span><span style="color: #000000;">z</span><span style="color: #0000FF;">,</span><span style="color: #000000;">z</span><span style="color: #0000FF;">)</span>
mpz_mul(z,z,z)
<span style="color: #7060A8;">mpfr_set_z</span><span style="color: #0000FF;">(</span><span style="color: #000000;">t</span><span style="color: #0000FF;">,</span><span style="color: #000000;">z</span><span style="color: #0000FF;">)</span>
mpfr_set_z(t,z)
<span style="color: #7060A8;">mpz_fac_ui</span><span style="color: #0000FF;">(</span><span style="color: #000000;">z</span><span style="color: #0000FF;">,</span><span style="color: #000000;">2</span><span style="color: #0000FF;">*</span><span style="color: #000000;">k</span><span style="color: #0000FF;">)</span>
mpz_fac_ui(z,2*k)
<span style="color: #7060A8;">mpfr_div_z</span><span style="color: #0000FF;">(</span><span style="color: #000000;">t</span><span style="color: #0000FF;">,</span><span style="color: #000000;">t</span><span style="color: #0000FF;">,</span><span style="color: #000000;">z</span><span style="color: #0000FF;">)</span>
mpfr_div_z(t,t,z)
<span style="color: #7060A8;">mpz_ui_pow_ui</span><span style="color: #0000FF;">(</span><span style="color: #000000;">z</span><span style="color: #0000FF;">,</span><span style="color: #000000;">k</span><span style="color: #0000FF;">,</span><span style="color: #000000;">3</span><span style="color: #0000FF;">)</span>
mpz_ui_pow_ui(z,k,3)
<span style="color: #7060A8;">mpfr_div_z</span><span style="color: #0000FF;">(</span><span style="color: #000000;">t</span><span style="color: #0000FF;">,</span><span style="color: #000000;">t</span><span style="color: #0000FF;">,</span><span style="color: #000000;">z</span><span style="color: #0000FF;">)</span>
mpfr_div_z(t,t,z)
<span style="color: #008080;">if</span> <span style="color: #7060A8;">even</span><span style="color: #0000FF;">(</span><span style="color: #000000;">k</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">then</span>
if even(k) then
<span style="color: #7060A8;">mpfr_sub</span><span style="color: #0000FF;">(</span><span style="color: #000000;">a</span><span style="color: #0000FF;">,</span><span style="color: #000000;">a</span><span style="color: #0000FF;">,</span><span style="color: #000000;">t</span><span style="color: #0000FF;">)</span>
mpfr_sub(a,a,t)
<span style="color: #008080;">else</span>
else
<span style="color: #7060A8;">mpfr_add</span><span style="color: #0000FF;">(</span><span style="color: #000000;">a</span><span style="color: #0000FF;">,</span><span style="color: #000000;">a</span><span style="color: #0000FF;">,</span><span style="color: #000000;">t</span><span style="color: #0000FF;">)</span>
mpfr_add(a,a,t)
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
end if
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
end for
<span style="color: #7060A8;">mpfr_mul_d</span><span style="color: #0000FF;">(</span><span style="color: #000000;">a</span><span style="color: #0000FF;">,</span><span style="color: #000000;">a</span><span style="color: #0000FF;">,</span><span style="color: #000000;">5</span><span style="color: #0000FF;">/</span><span style="color: #000000;">2</span><span style="color: #0000FF;">)</span>
mpfr_mul_d(a,a,5/2)
 
<span style="color: #008080;">for</span> <span style="color: #000000;">k</span><span style="color: #0000FF;">=</span><span style="color: #000000;">0</span> <span style="color: #008080;">to</span> <span style="color: #000000;">19</span> <span style="color: #008080;">do</span>
for k=0 to 19 do
<span style="color: #7060A8;">mpz_ui_pow_ui</span><span style="color: #0000FF;">(</span><span style="color: #000000;">z</span><span style="color: #0000FF;">,</span><span style="color: #000000;">k</span><span style="color: #0000FF;">,</span><span style="color: #000000;">5</span><span style="color: #0000FF;">)</span>
mpz_ui_pow_ui(z,k,5)
<span style="color: #7060A8;">mpz_mul_si</span><span style="color: #0000FF;">(</span><span style="color: #000000;">z</span><span style="color: #0000FF;">,</span><span style="color: #000000;">z</span><span style="color: #0000FF;">,</span><span style="color: #000000;">126392</span><span style="color: #0000FF;">)</span>
mpz_mul_si(z,z,126392)
<span style="color: #7060A8;">mpz_ui_pow_ui</span><span style="color: #0000FF;">(</span><span style="color: #000000;">pk</span><span style="color: #0000FF;">,</span><span style="color: #000000;">k</span><span style="color: #0000FF;">,</span><span style="color: #000000;">4</span><span style="color: #0000FF;">)</span>
mpz_ui_pow_ui(pk,k,4)
<span style="color: #7060A8;">mpz_mul_si</span><span style="color: #0000FF;">(</span><span style="color: #000000;">pk</span><span style="color: #0000FF;">,</span><span style="color: #000000;">pk</span><span style="color: #0000FF;">,</span><span style="color: #000000;">412708</span><span style="color: #0000FF;">)</span>
mpz_mul_si(pk,pk,412708)
<span style="color: #7060A8;">mpz_add</span><span style="color: #0000FF;">(</span><span style="color: #000000;">z</span><span style="color: #0000FF;">,</span><span style="color: #000000;">z</span><span style="color: #0000FF;">,</span><span style="color: #000000;">pk</span><span style="color: #0000FF;">)</span>
mpz_add(z,z,pk)
<span style="color: #7060A8;">mpz_ui_pow_ui</span><span style="color: #0000FF;">(</span><span style="color: #000000;">pk</span><span style="color: #0000FF;">,</span><span style="color: #000000;">k</span><span style="color: #0000FF;">,</span><span style="color: #000000;">3</span><span style="color: #0000FF;">)</span>
mpz_ui_pow_ui(pk,k,3)
<span style="color: #7060A8;">mpz_mul_si</span><span style="color: #0000FF;">(</span><span style="color: #000000;">pk</span><span style="color: #0000FF;">,</span><span style="color: #000000;">pk</span><span style="color: #0000FF;">,</span><span style="color: #000000;">531578</span><span style="color: #0000FF;">)</span>
mpz_mul_si(pk,pk,531578)
<span style="color: #7060A8;">mpz_add</span><span style="color: #0000FF;">(</span><span style="color: #000000;">z</span><span style="color: #0000FF;">,</span><span style="color: #000000;">z</span><span style="color: #0000FF;">,</span><span style="color: #000000;">pk</span><span style="color: #0000FF;">)</span>
mpz_add(z,z,pk)
<span style="color: #7060A8;">mpz_add_si</span><span style="color: #0000FF;">(</span><span style="color: #000000;">z</span><span style="color: #0000FF;">,</span><span style="color: #000000;">z</span><span style="color: #0000FF;">,</span><span style="color: #000000;">k</span><span style="color: #0000FF;">*</span><span style="color: #000000;">k</span><span style="color: #0000FF;">*</span><span style="color: #000000;">336367</span><span style="color: #0000FF;">)</span>
mpz_add_si(z,z,k*k*336367)
<span style="color: #7060A8;">mpz_add_si</span><span style="color: #0000FF;">(</span><span style="color: #000000;">z</span><span style="color: #0000FF;">,</span><span style="color: #000000;">z</span><span style="color: #0000FF;">,</span><span style="color: #000000;">k</span><span style="color: #0000FF;">*</span><span style="color: #000000;">104000</span><span style="color: #0000FF;">)</span>
mpz_add_si(z,z,k*104000)
<span style="color: #7060A8;">mpz_add_si</span><span style="color: #0000FF;">(</span><span style="color: #000000;">z</span><span style="color: #0000FF;">,</span><span style="color: #000000;">z</span><span style="color: #0000FF;">,</span><span style="color: #000000;">12463</span><span style="color: #0000FF;">)</span>
mpz_add_si(z,z,12463)
<span style="color: #7060A8;">mpfr_set_z</span><span style="color: #0000FF;">(</span><span style="color: #000000;">t</span><span style="color: #0000FF;">,</span><span style="color: #000000;">z</span><span style="color: #0000FF;">)</span>
mpfr_set_z(t,z)
<span style="color: #7060A8;">mpz_fac_ui</span><span style="color: #0000FF;">(</span><span style="color: #000000;">z</span><span style="color: #0000FF;">,</span><span style="color: #000000;">2</span><span style="color: #0000FF;">*</span><span style="color: #000000;">k</span><span style="color: #0000FF;">+</span><span style="color: #000000;">1</span><span style="color: #0000FF;">)</span>
mpz_fac_ui(z,2*k+1)
<span style="color: #7060A8;">mpz_pow_ui</span><span style="color: #0000FF;">(</span><span style="color: #000000;">z</span><span style="color: #0000FF;">,</span><span style="color: #000000;">z</span><span style="color: #0000FF;">,</span><span style="color: #000000;">3</span><span style="color: #0000FF;">)</span>
mpz_pow_ui(z,z,3)
<span style="color: #7060A8;">mpfr_mul_z</span><span style="color: #0000FF;">(</span><span style="color: #000000;">t</span><span style="color: #0000FF;">,</span><span style="color: #000000;">t</span><span style="color: #0000FF;">,</span><span style="color: #000000;">z</span><span style="color: #0000FF;">)</span>
mpfr_mul_z(t,t,z)
<span style="color: #7060A8;">mpz_fac_ui</span><span style="color: #0000FF;">(</span><span style="color: #000000;">z</span><span style="color: #0000FF;">,</span><span style="color: #000000;">2</span><span style="color: #0000FF;">*</span><span style="color: #000000;">k</span><span style="color: #0000FF;">)</span>
mpz_fac_ui(z,2*k)
<span style="color: #7060A8;">mpz_pow_ui</span><span style="color: #0000FF;">(</span><span style="color: #000000;">z</span><span style="color: #0000FF;">,</span><span style="color: #000000;">z</span><span style="color: #0000FF;">,</span><span style="color: #000000;">3</span><span style="color: #0000FF;">)</span>
mpz_pow_ui(z,z,3)
<span style="color: #7060A8;">mpfr_mul_z</span><span style="color: #0000FF;">(</span><span style="color: #000000;">t</span><span style="color: #0000FF;">,</span><span style="color: #000000;">t</span><span style="color: #0000FF;">,</span><span style="color: #000000;">z</span><span style="color: #0000FF;">)</span>
mpfr_mul_z(t,t,z)
<span style="color: #7060A8;">mpz_fac_ui</span><span style="color: #0000FF;">(</span><span style="color: #000000;">z</span><span style="color: #0000FF;">,</span><span style="color: #000000;">k</span><span style="color: #0000FF;">)</span>
mpz_fac_ui(z,k)
<span style="color: #7060A8;">mpz_pow_ui</span><span style="color: #0000FF;">(</span><span style="color: #000000;">z</span><span style="color: #0000FF;">,</span><span style="color: #000000;">z</span><span style="color: #0000FF;">,</span><span style="color: #000000;">3</span><span style="color: #0000FF;">)</span>
mpz_pow_ui(z,z,3)
<span style="color: #7060A8;">mpfr_mul_z</span><span style="color: #0000FF;">(</span><span style="color: #000000;">t</span><span style="color: #0000FF;">,</span><span style="color: #000000;">t</span><span style="color: #0000FF;">,</span><span style="color: #000000;">z</span><span style="color: #0000FF;">)</span>
mpfr_mul_z(t,t,z)
<span style="color: #7060A8;">mpz_fac_ui</span><span style="color: #0000FF;">(</span><span style="color: #000000;">z</span><span style="color: #0000FF;">,</span><span style="color: #000000;">3</span><span style="color: #0000FF;">*</span><span style="color: #000000;">k</span><span style="color: #0000FF;">+</span><span style="color: #000000;">2</span><span style="color: #0000FF;">)</span>
mpz_fac_ui(z,3*k+2)
<span style="color: #7060A8;">mpfr_div_z</span><span style="color: #0000FF;">(</span><span style="color: #000000;">t</span><span style="color: #0000FF;">,</span><span style="color: #000000;">t</span><span style="color: #0000FF;">,</span><span style="color: #000000;">z</span><span style="color: #0000FF;">)</span>
mpfr_div_z(t,t,z)
<span style="color: #7060A8;">mpz_fac_ui</span><span style="color: #0000FF;">(</span><span style="color: #000000;">z</span><span style="color: #0000FF;">,</span><span style="color: #000000;">4</span><span style="color: #0000FF;">*</span><span style="color: #000000;">k</span><span style="color: #0000FF;">+</span><span style="color: #000000;">3</span><span style="color: #0000FF;">)</span>
mpz_fac_ui(z,4*k+3)
<span style="color: #7060A8;">mpz_pow_ui</span><span style="color: #0000FF;">(</span><span style="color: #000000;">z</span><span style="color: #0000FF;">,</span><span style="color: #000000;">z</span><span style="color: #0000FF;">,</span><span style="color: #000000;">3</span><span style="color: #0000FF;">)</span>
mpz_pow_ui(z,z,3)
<span style="color: #7060A8;">mpfr_div_z</span><span style="color: #0000FF;">(</span><span style="color: #000000;">t</span><span style="color: #0000FF;">,</span><span style="color: #000000;">t</span><span style="color: #0000FF;">,</span><span style="color: #000000;">z</span><span style="color: #0000FF;">)</span>
mpfr_div_z(t,t,z)
<span style="color: #008080;">if</span> <span style="color: #7060A8;">odd</span><span style="color: #0000FF;">(</span><span style="color: #000000;">k</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">then</span>
if odd(k) then
<span style="color: #7060A8;">mpfr_sub</span><span style="color: #0000FF;">(</span><span style="color: #000000;">w</span><span style="color: #0000FF;">,</span><span style="color: #000000;">w</span><span style="color: #0000FF;">,</span><span style="color: #000000;">t</span><span style="color: #0000FF;">)</span>
mpfr_sub(w,w,t)
<span style="color: #008080;">else</span>
else
<span style="color: #7060A8;">mpfr_add</span><span style="color: #0000FF;">(</span><span style="color: #000000;">w</span><span style="color: #0000FF;">,</span><span style="color: #000000;">w</span><span style="color: #0000FF;">,</span><span style="color: #000000;">t</span><span style="color: #0000FF;">)</span>
mpfr_add(w,w,t)
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
end if
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
end for
<span style="color: #7060A8;">mpfr_div_si</span><span style="color: #0000FF;">(</span><span style="color: #000000;">w</span><span style="color: #0000FF;">,</span><span style="color: #000000;">w</span><span style="color: #0000FF;">,</span><span style="color: #000000;">24</span><span style="color: #0000FF;">)</span>
mpfr_div_si(w,w,24)
 
<span style="color: #008080;">constant</span> <span style="color: #000000;">fmt</span> <span style="color: #0000FF;">=</span> <span style="color: #008000;">"""
constant fmt = """
Actual value to 100 decimal places:
Actual value to 100 decimal places:
1.2020569031595942853997381615114499907649862923404988817922715553418382057863130901864558736093352581
1.2020569031595942853997381615114499907649862923404988817922715553418382057863130901864558736093352581
 
First 1000 terms of zeta(3) truncated to 100 decimal places. (accurate to 6 decimal places):
First 1000 terms of zeta(3) truncated to 100 decimal places. (accurate to 6 decimal places):
%s
%s
 
First 158 terms of Markov / Apery representation truncated to 100 decimal places:
First 158 terms of Markov / Apery representation truncated to 100 decimal places:
%s
%s
 
First 20 terms of Wedeniwski representation truncated to 100 decimal places:
First 20 terms of Wedeniwski representation truncated to 100 decimal places:
%s
%s
 
"""</span>
"""
<span style="color: #004080;">string</span> <span style="color: #000000;">direct</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">mpfr_get_fixed</span><span style="color: #0000FF;">(</span><span style="color: #000000;">d</span><span style="color: #0000FF;">,</span><span style="color: #000000;">100</span><span style="color: #0000FF;">),</span>
string direct = mpfr_get_fixed(d,100),
<span style="color: #000000;">mapery</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">mpfr_get_fixed</span><span style="color: #0000FF;">(</span><span style="color: #000000;">a</span><span style="color: #0000FF;">,</span><span style="color: #000000;">100</span><span style="color: #0000FF;">),</span>
mapery = mpfr_get_fixed(a,100),
<span style="color: #000000;">wdnski</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">mpfr_get_fixed</span><span style="color: #0000FF;">(</span><span style="color: #000000;">w</span><span style="color: #0000FF;">,</span><span style="color: #000000;">100</span><span style="color: #0000FF;">)</span>
wdnski = mpfr_get_fixed(w,100)
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">fmt</span><span style="color: #0000FF;">,{</span><span style="color: #000000;">direct</span><span style="color: #0000FF;">,</span><span style="color: #000000;">mapery</span><span style="color: #0000FF;">,</span><span style="color: #000000;">wdnski</span><span style="color: #0000FF;">})</span>
printf(1,fmt,{direct,mapery,wdnski})
<!--</syntaxhighlight>-->
</syntaxhighlight>
{{out}}
<pre>
Line 624 ⟶ 715:
1.2020569031595942853997381615114499907649862923404988817922715553418382057863130901864558736093352581
</div>
 
=={{header|REXX}}==
===version 1===
Straightforward approach: just apply the formulas. Missing REXX functions Fact (factorial n!) and Whole (is integer?) were added. Scroll down to see them.
<syntaxhighlight lang="rexx" style="overflow: scroll; height: 75em">
parse version version; say version; glob. = ''; numeric digits 101
say 'Apery''s constant = zeta(3) to 100 decimal places'
say 'Version 1 Formulas with factorials'
say
call time('r'); a = TrueValue(); e = format(time('e'),,3)
say 'True value' a '('e 'seconds)'
call time('r'); a = Definition(); e = format(time('e'),,3)
say 'Definition' a '('e 'seconds)'
call time('r'); a = Markov(); e = format(time('e'),,3)
say 'Markov ' a '('e 'seconds)'
call time('r'); a = Wedeniwski(); e = format(time('e'),,3)
say 'Wedeniwski' a '('e 'seconds)'
exit
 
TrueValue:
procedure expose glob.
return 1.2020569031595942853997381615114499907649862923404988817922715553418382057863130901864558736093352581
 
Definition:
/* Cf Definition */
procedure expose glob.
numeric digits digits()+2
y = 0
do k = 1 to 1000
y = y + 1/(k**3)
end
numeric digits digits()-2
return y+0
 
Markov:
/* Markov Apery series */
procedure expose glob.
numeric digits digits()+2
y = 0
do k = 1 to 158
y = y + (-1)**(k-1) * Fact(k)**2 / (Fact(2*k)*k**3)
end
y = y*2.5
numeric digits digits()-2
return y+0
 
Wedeniwski:
/* Wedeniwski series */
procedure expose glob.
numeric digits Digits()+2
y = 0
do k = 0 to 19
y = y + ((-1)**k * Fact(2*k+1)**3 * Fact(2*k)**3 * Fact(k)**3,
* (((((126392*k+412708)*k+531578)*k+336367)*k+104000)*k+12463)),
/ (Fact(3*k+2) * Fact(4*k+3)**3)
end
y = y/24
numeric digits Digits()-2
return y+0
 
Fact:
/* Factorial n! */
procedure expose glob.
arg x
/* Validity */
if \ Whole(x) then
return 'X'
if x < 0 then
return 'X'
/* Current in memory? */
if glob.fact.x <> '' then
return glob.fact.x
w = x-1
/* Previous in memory? */
if glob.fact.w = '' then do
/* Loop cf definition */
y = 1
do n = 2 to x
y = y*n
end
glob.fact.x = y
end
else
/* Multiply */
glob.fact.x = glob.fact.w*x
return glob.fact.x
 
Whole:
/* Is a number integer? */
procedure expose glob.
arg x
/* Formula */
return Datatype(x,'w')
</syntaxhighlight>
{{out}}
<pre style="font-size:75%>
REXX-Regina_3.9.6(MT) 5.00 29 Apr 2024
Apery's constant = zeta(3) to 100 decimal places
Version 1 Formulas with factorials
 
True value 1.2020569031595942853997381615114499907649862923404988817922715553418382057863130901864558736093352581 (0.000 seconds)
Definition 1.2020564036593442854830714115115999903483212709031775135036540966118572571921400836130084123260473112 (0.020 seconds)
Markov 1.2020569031595942853997381615114499907649862923404988817922715553418382057863130901864558736093352581 (0.071 seconds)
Wedeniwski 1.2020569031595942853997381615114499907649862923404988817922715553418382057863130901864558736093352581 (0.007 seconds)
</pre>
 
===version 2===
All factorials replaced by recurring updates and a few other optimizations (compare ALGOL 68 and Nim). This version does not require additional routines.
Much more verbose as Version 1, but slightly faster.
<syntaxhighlight lang="rexx">
parse version version; say version; glob. = ''; numeric digits 101
say 'Apery''s constant = zeta(3) to 100 decimal places'
say 'Version 2 Factorials replaced by recurring values'
say
call time('r'); a = TrueValue(); e = format(time('e'),,3)
say 'True value' a '('e 'seconds)'
call time('r'); a = Definition(); e = format(time('e'),,3)
say 'Definition' a '('e 'seconds)'
call time('r'); a = Markov(); e = format(time('e'),,3)
say 'Markov ' a '('e 'seconds)'
call time('r'); a = Wedeniwski(); e = format(time('e'),,3)
say 'Wedeniwski' a '('e 'seconds)'
exit
 
TrueValue:
procedure expose glob.
return 1.2020569031595942853997381615114499907649862923404988817922715553418382057863130901864558736093352581
 
Definition:
/* Cf definition */
procedure expose glob.
numeric digits digits()+2
y = 0
do k = 1 to 1000
y = y + 1/(k**3)
end
numeric digits digits()-2
return y+0
 
Markov:
/* Markov Apery */
procedure expose glob.
numeric digits digits()+2
y = 0; s = -1; f10 = 1; f20 = 1
do k = 1 to 158
s = -s; f10 = f10*k; k2 = k+k; f20 = f20*k2*(k2-1)
y = y + (s*f10*f10) / (f20*k*k*k)
end
y = y*2.5
numeric digits digits()-2
return y+0
 
Wedeniwski:
/* Wedeniwski */
procedure expose glob.
numeric digits Digits()+2
/* Term for k = 0 */
s = 1; f10 = 1; f20 = 1; f21 = 1; f32 = 2; f43 = 6; f00 = 12463; y = 0
do k = 1 to 20
/* Add term to series */
y = y + s*((f10*f20*f21)**3*f00) / (f32*f43**3)
/* Prepare next term */
k2 = k+k; k3 = k2+k; k4 = k3+k
/* Change sign */
s = -s
/* Recurring factorials */
f10 = f10 * k
f20 = f20 * k2 * (k2-1)
f21 = f21 * k2 * (k2+1)
f32 = f32 * k3 * (k3+1) * (k3+2)
f43 = f43 * k4 * (k4+1) * (k4+2) * (k4+3)
/* Polynomial */
f00 = ((((126392*k+412708)*k+531578)*k+336367)*k+104000)*k+12463
end
y = y/24
numeric digits Digits()-2
return y+0
</syntaxhighlight>
{{out}}
<pre style="font-size:75%>
REXX-Regina_3.9.6(MT) 5.00 29 Apr 2024
Apery's constant = zeta(3) to 100 decimal places
Version 2 Factorials replaced by recurring values
 
True value 1.2020569031595942853997381615114499907649862923404988817922715553418382057863130901864558736093352581 (0.000 seconds)
Definition 1.2020564036593442854830714115115999903483212709031775135036540966118572571921400836130084123260473112 (0.023 seconds)
Markov 1.2020569031595942853997381615114499907649862923404988817922715553418382057863130901864558736093352581 (0.041 seconds)
Wedeniwski 1.2020569031595942853997381615114499907649862923404988817922715553418382057863130901864558736093352581 (0.006 seconds)
</pre>
 
=={{header|Sidef}}==