Sum of a series: Difference between revisions

m (→‎Sums with running significance: added whitespace to the output section prologue.)
(164 intermediate revisions by 70 users not shown)
Line 1:
{{task|Arithmetic operations}}
{{task|Arithmetic operations}}Compute the ''n''-th term of a [[wp:Series (mathematics)|series]], i.e. the sum of the ''n'' first terms of the corresponding [[wp:sequence|sequence]]. Informally this value, or its limit when n tends to infinity, is also called the ''sum of the series'', thus the title of this task.
Compute the &nbsp; '''n'''<sup>th</sup> &nbsp; term of a [[wp:Series (mathematics)|series]], &nbsp; i.e. the sum of the &nbsp; '''n''' &nbsp; first terms of the corresponding [[wp:sequence|sequence]].
 
Informally this value, or its limit when &nbsp; '''n''' &nbsp; tends to infinity, is also called the ''sum of the series'', thus the title of this task.
 
For this task, use:
:::::: <big><math>S_n = \sum_{k=1}^n \frac{1}{k^2}</math></big>
 
<br>
<math>S_n = \sum_{k=1}^n \frac{1}{k^2}</math>
:: and compute &nbsp; <big><math>S_{1000}</math></big>
 
and compute <math>S_{1000}</math>.
 
This approximates the &nbsp; [[wp:Riemann zeta function|zeta function]] &nbsp; for s&nbsp; <big>S=2</big>, &nbsp; whose exact value
 
:::::: <big><math>\zeta(2) = {\pi^2\over 6}</math></big>
 
is the solution of the [[wp:Basel problem|Basel problem]].
<br><br>
 
=={{header|11l}}==
{{trans|Python}}
 
<syntaxhighlight lang="11l">print(sum((1..1000).map(x -> 1.0/x^2)))</syntaxhighlight>
 
{{out}}
<pre>
1.64393
</pre>
 
=={{header|360 Assembly}}==
<syntaxhighlight lang="360asm">* Sum of a series 30/03/2017
SUMSER CSECT
USING SUMSER,12 base register
LR 12,15 set addressability
LR 10,14 save r14
LE 4,=E'0' s=0
LE 2,=E'1' i=1
DO WHILE=(CE,2,LE,=E'1000') do i=1 to 1000
LER 0,2 i
MER 0,2 *i
LE 6,=E'1' 1
DER 6,0 1/i**2
AER 4,6 s=s+1/i**2
AE 2,=E'1' i=i+1
ENDDO , enddo i
LA 0,4 format F13.4
LER 0,4 s
BAL 14,FORMATF call formatf
MVC PG(13),0(1) retrieve result
XPRNT PG,80 print buffer
BR 10 exit
COPY FORMATF formatf code
PG DC CL80' ' buffer
END SUMSER</syntaxhighlight>
{{out}}
<pre>
1.6439
</pre>
 
=={{header|ACL2}}==
<langsyntaxhighlight lang="lisp">(defun sum-x^-2 (max-x)
(if (zp max-x)
0
(+ (/ (* max-x max-x))
(sum-x^-2 (1- max-x)))))</langsyntaxhighlight>
 
=={{header|Action!}}==
{{libheader|Action! Tool Kit}}
<syntaxhighlight lang="action!">INCLUDE "D2:REAL.ACT" ;from the Action! Tool Kit
 
PROC Calc(CARD n REAL POINTER res)
CARD i,st
BYTE perc
REAL one,a,b
 
IntToReal(0,res)
IF n=0 THEN RETURN FI
 
IntToReal(1,one)
st=n/100
FOR i=1 TO n
DO
IF i MOD st=0 THEN
PrintB(perc) Put('%) PutE() Put(28)
perc==+1
FI
 
IntToReal(i,a)
RealMult(a,a,b)
RealDiv(one,b,a)
RealAdd(res,a,b)
RealAssign(b,res)
OD
RETURN
 
PROC Main()
REAL POINTER res
CARD n=[1000]
 
Put(125) PutE() ;clear screen
Calc(n,res)
PrintF("s(%U)=",n)
PrintRE(res)
RETURN</syntaxhighlight>
{{out}}
[https://gitlab.com/amarok8bit/action-rosetta-code/-/raw/master/images/Sum_of_a_series.png Screenshot from Atari 8-bit computer]
<pre>
s(1000)=1.64392967
</pre>
 
=={{header|ActionScript}}==
<langsyntaxhighlight ActionScriptlang="actionscript">function partialSum(n:uint):Number
{
var sum:Number = 0;
Line 28 ⟶ 117:
return sum;
}
trace(partialSum(1000));</langsyntaxhighlight>
 
=={{header|Ada}}==
<langsyntaxhighlight lang="ada">with Ada.Text_Io; use Ada.Text_Io;
 
procedure Sum_Series is
Line 49 ⟶ 139:
Put(Item => Sum, Aft => 10, Exp => 0);
New_Line;
end Sum_Series;</langsyntaxhighlight>
 
=={{header|Aime}}==
<langsyntaxhighlight lang="aime">real
Invsqr(real n)
{
return 1 / (n * n);
}
 
Line 75 ⟶ 165:
o_byte('\n');
 
return 0;
}</langsyntaxhighlight>
 
=={{header|ALGOL 68}}==
<syntaxhighlight lang="algol68">MODE RANGE = STRUCT(INT lwb, upb);
{{works with|ALGOL 68|Revision 1 - no extensions to language used}}
 
{{works with|ALGOL 68G|Any - tested with release [http://sourceforge.net/projects/algol68/files/algol68g/algol68g-1.18.0/algol68g-1.18.0-9h.tiny.el5.centos.fc11.i386.rpm/download 1.18.0-9h.tiny]}}
 
{{works with|ELLA ALGOL 68|Any (with appropriate job cards) - tested with release [http://sourceforge.net/projects/algol68/files/algol68toc/algol68toc-1.8.8d/algol68toc-1.8-8d.fc9.i386.rpm/download 1.8-8d]}}
<lang algol68>MODE RANGE = STRUCT(INT lwb, upb);
 
PROC sum = (PROC (INT)LONG REAL f, RANGE range)LONG REAL:(
Line 95 ⟶ 180:
 
test:(
RANGE range = (1,1001000);
PROC f = (INT x)LONG REAL: LENG REAL(1) / LENG REAL(x)**2;
print(("Sum of f(x) from ", whole(lwb OF range, 0), " to ",whole(upb OF range, 0)," is ", fixed(SHORTEN sum(f,range),-8,5),".", new line))
)</langsyntaxhighlight>
Output:
<pre>
Sum of f(x) from +1 to 1000 is +100 is +1.63498390018489e +064393.
</pre>
 
=={{header|ALGOL W}}==
Uses [[Jensen's Device]] (first introduced in Algol 60) which uses call by name to allow a summation index and the expression to sum to be specified as parameters to a summation procedure.
<syntaxhighlight lang="algolw">begin % compute the sum of 1/k^2 for k = 1..1000 %
integer k;
% computes the sum of a series from lo to hi using Jensen's Device %
real procedure sum ( integer %name% k; integer value lo, hi; real procedure term );
begin
real temp;
temp := 0;
k := lo;
while k <= hi do begin
temp := temp + term;
k := k + 1
end while_k_le_temp;
temp
end;
write( r_format := "A", r_w := 8, r_d := 5, sum( k, 1, 1000, 1 / ( k * k ) ) )
end.</syntaxhighlight>
{{out}}
<pre>
1.64393
</pre>
 
=={{header|APL}}==
<langsyntaxhighlight APLlang="apl"> +/÷2*⍨⍳1000
1.64393</langsyntaxhighlight>
 
=={{header|AppleScript}}==
{{Trans|JavaScript}}
{{Trans|Haskell}}
<syntaxhighlight lang="applescript">----------------------- SUM OF SERIES ----------------------
 
-- seriesSum :: Num a => (a -> a) -> [a] -> a
on seriesSum(f, xs)
script go
property mf : |λ| of mReturn(f)
on |λ|(a, x)
a + mf(x)
end |λ|
end script
foldl(go, 0, xs)
end seriesSum
 
 
---------------------------- TEST --------------------------
 
-- inverseSquare :: Num -> Num
on inverseSquare(x)
1 / (x ^ 2)
end inverseSquare
 
on run
seriesSum(inverseSquare, enumFromTo(1, 1000))
--> 1.643934566682
end run
 
 
--------------------- GENERIC FUNCTIONS --------------------
 
-- enumFromTo :: Int -> Int -> [Int]
on enumFromTo(m, n)
if m ≤ n then
set lst to {}
repeat with i from m to n
set end of lst to i
end repeat
lst
else
{}
end if
end enumFromTo
 
 
-- foldl :: (a -> b -> a) -> a -> [b] -> a
on foldl(f, startValue, xs)
tell mReturn(f)
set v to startValue
set lng to length of xs
repeat with i from 1 to lng
set v to |λ|(v, item i of xs, i, xs)
end repeat
return v
end tell
end foldl
 
 
-- Lift 2nd class handler function into 1st class script wrapper
-- mReturn :: Handler -> Script
on mReturn(f)
if class of f is script then
f
else
script
property |λ| : f
end script
end if
end mReturn</syntaxhighlight>
{{Out}}
<syntaxhighlight lang="applescript">1.643934566682</syntaxhighlight>
 
=={{header|Arturo}}==
<syntaxhighlight lang="rebol">series: map 1..1000 => [1.0/&^2]
print [sum series]</syntaxhighlight>
 
{{out}}
 
<pre>1.643934566681561</pre>
 
=={{header|Asymptote}}==
<syntaxhighlight lang="Asymptote">real sum;
for(int i = 1; i < 1000; ++i) sum = sum + 1 / (i * i);
write(sum, suffix=none);</syntaxhighlight>
{{out}}
<pre>1.64393356668156</pre>
 
=={{header|AutoHotkey}}==
AutoHotkey allows the precision of floating point numbers generated by math operations to be adjusted via the SetFormat command. The default is 6 decimal places.
<langsyntaxhighlight lang="autohotkey">SetFormat, FloatFast, 0.15
While A_Index <= 1000
sum += 1/A_Index**2
MsgBox,% sum ;1.643934566681554</langsyntaxhighlight>
 
=={{header|AWK}}==
<langsyntaxhighlight lang="awk">$ awk 'BEGIN{for(i=1;i<=1000;i++)s+=1/(i*i);print s}'
1.64393</langsyntaxhighlight>
 
=={{header|BASIC}}==
{{works with|QuickBasic|4.5}}
<langsyntaxhighlight lang="qbasic">function s(x%)
s = 1 / x ^ 2
end function
Line 131 ⟶ 330:
sum = ret
end function
print sum(1, 1000)</langsyntaxhighlight>
 
==={{header|BASIC256}}===
{{works with|True BASIC}}
<syntaxhighlight lang="basic256">
function sumSeries(n)
if n = 0 then sumSeries = 0
let sum = 0
for k = 1 to n
let sum = sum + 1 / k ^ 2
next k
sumSeries = sum
end function
 
print "s(1000) = "; sumSeries(1000)
=={{header|BBC BASIC}}==
print "zeta(2) = "; pi * pi / 6
<lang bbcbasic> FOR i% = 1 TO 1000
end
</syntaxhighlight>
 
==={{header|BBC BASIC}}===
<syntaxhighlight lang="bbcbasic"> FOR i% = 1 TO 1000
sum += 1/i%^2
NEXT
PRINT sum</langsyntaxhighlight>
 
==={{header|Gambas}}===
<syntaxhighlight lang="vbnet">Public Sub Main()
 
Print "s(1000) = "; sumSeries(1000)
Print "zeta(2) = "; Pi * Pi / 6
 
End
 
Function sumSeries(n As Integer) As Float
 
If n = 0 Then Return 0
Dim sum As Float = 0
For k As Integer = 1 To n
sum += 1.0 / (k * k)
Next
Return sum
 
End Function</syntaxhighlight>
 
==={{header|QBasic}}===
{{works with|QBasic|1.1}}
{{works with|QuickBasic|4.5}}
<syntaxhighlight lang="qbasic">FUNCTION sumSeries# (n)
IF n = 0 THEN sunSeries = 0
FOR k = 1 TO n
sum# = sum# + 1! / (k * k)
NEXT
sumSeries# = sum#
END FUNCTION
 
pi# = 4 * ATN(1)
PRINT "s(1000) = "; sumSeries#(1000)
PRINT "zeta(2) = "; pi# * pi# / 6
END</syntaxhighlight>
 
==={{header|True BASIC}}===
{{works with|BASIC256}}
<syntaxhighlight lang="qbasic">
FUNCTION sumSeries(n)
IF n = 0 then
LET sumSeries = 0
END IF
LET sum = 0
FOR k = 1 to n
LET sum = sum + 1 / k ^ 2
NEXT k
LET sumSeries = sum
END FUNCTION
 
PRINT "s(1000) = "; sumSeries(1000)
PRINT "zeta(2) = "; pi * pi / 6
END
</syntaxhighlight>
 
==={{header|XBasic}}===
{{works with|Windows XBasic}}
<syntaxhighlight lang="qbasic">PROGRAM "SumOfASeries"
VERSION "0.0000"
 
DECLARE FUNCTION Entry ()
DECLARE FUNCTION sumSeries#(n)
 
FUNCTION Entry ()
 
pi# = 3.1415926535896
 
PRINT "s(1000) = "; sumSeries#(1000)
PRINT "zeta(2) = "; pi# * pi# / 6
 
END FUNCTION
 
FUNCTION sumSeries#(n)
IF n = 0 THEN RETURN 0
sum# = 0
FOR k = 1 TO n
sum# = sum# + 1.0/(k * k)
NEXT
RETURN sum#
END FUNCTION
END PROGRAM</syntaxhighlight>
 
==={{header|Yabasic}}===
<syntaxhighlight lang="yabasic">
sub sumSeries(n)
if n = 0 then return 0 : fi
sum = 0
for k = 1 to n
sum = sum + 1 / k ^ 2
next k
return sum
end sub
 
print "s(1000) = ", sumSeries(1000)
print "zeta(2) = ", pi * pi / 6
end
</syntaxhighlight>
 
=={{header|bc}}==
<langsyntaxhighlight lang="bc">define f(x) {
return(1 / (x * x))
}
Line 156 ⟶ 468:
 
scale = 20
s(1000)</langsyntaxhighlight>
 
{{Out}}
<pre>1.64393456668155979824</pre>
 
=={{header|Beads}}==
<syntaxhighlight lang="beads">beads 1 program 'Sum of a series'
calc main_init
var k = 0
loop reps:1000 count:n
k = k + 1/n^2
log to_str(k)</syntaxhighlight>
{{out}}
<pre>1.6439345666815615</pre>
 
=={{header|Befunge}}==
Emulates fixed point arithmetic with a 32 bit integer so the result is not very accurate.
<langsyntaxhighlight lang="befunge">05558***>::"~"%00p"~"/10p"( }}2"*v
v*8555$_^#!:-1+*"~"g01g00+/*:\***<
<@$_,#!>#:<+*<v+*86%+55:p00<6\0/**
"."\55+%68^>\55+/00g1-:#^_$</langsyntaxhighlight>
{{out}}
<pre>1.643934</pre>
 
=={{header|BQN}}==
 
<code>√⁼</code> here reads as the inverse of the square root, which can be changed to <code>2⋆˜</code> or <code>ט</code>. It has been used here since it is the most intuitive.
 
<syntaxhighlight lang="bqn"> +´÷√⁼1+↕1000
1.6439345666815597</syntaxhighlight>
 
=={{header|Bracmat}}==
<langsyntaxhighlight lang="bracmat">( 0:?i
& 0:?S
& whl'(1+!i:~>1000:?i&!i^-2+!S:?S)
& out$!S
& out$(flt$(!S,10))
);</langsyntaxhighlight>
Output:
<pre>8354593848314...../5082072010432..... (1732 digits and a slash)
Line 182 ⟶ 511:
 
=={{header|Brat}}==
<langsyntaxhighlight lang="brat">p 1.to(1000).reduce 0 { sum, x | sum + 1.0 / x ^ 2 } #Prints 1.6439345666816</langsyntaxhighlight>
 
=={{header|C}}==
<langsyntaxhighlight lang="c">#include <stdio.h>
 
double Invsqr(double n)
Line 203 ⟶ 532:
return 0;
}</langsyntaxhighlight>
 
=={{header|C++}}==
<lang cpp>#include <iostream>
 
double f(double x);
 
int main()
{
unsigned int start = 1;
unsigned int end = 1000;
double sum = 0;
 
for( unsigned int x = start; x <= end; ++x )
{
sum += f(x);
}
std::cout << "Sum of f(x) from " << start << " to " << end << " is " << sum << std::endl;
return 0;
}
 
 
double f(double x)
{
return ( 1.0 / ( x * x ) );
}</lang>
 
=={{header|C sharp|C#}}==
<langsyntaxhighlight lang="csharp">class Program
{
static void Main(string[] args)
Line 249 ⟶ 553:
Console.ReadLine();
}
}</langsyntaxhighlight>
 
An alternative approach using Enumerable.Range() to generate the numbers.
 
<langsyntaxhighlight lang="csharp">class Program
{
static void Main(string[] args)
Line 262 ⟶ 566:
Console.ReadLine();
}
}</langsyntaxhighlight>
 
=={{header|C++}}==
<syntaxhighlight lang="cpp">#include <iostream>
 
double f(double x);
 
int main()
{
unsigned int start = 1;
unsigned int end = 1000;
double sum = 0;
 
for( unsigned int x = start; x <= end; ++x )
{
sum += f(x);
}
std::cout << "Sum of f(x) from " << start << " to " << end << " is " << sum << std::endl;
return 0;
}
 
 
double f(double x)
{
return ( 1.0 / ( x * x ) );
}</syntaxhighlight>
 
=={{header|CLIPS}}==
<langsyntaxhighlight lang="clips">(deffunction S (?x) (/ 1 (* ?x ?x)))
(deffunction partial-sum-S
(?start ?stop)
Line 273 ⟶ 602:
)
(return ?sum)
)</langsyntaxhighlight>
 
Usage:
Line 280 ⟶ 609:
 
=={{header|Clojure}}==
<langsyntaxhighlight lang="clojure">(reduce + (map #(/ 1.0 % %) (range 1 1001)))</langsyntaxhighlight>
 
=={{header|CLU}}==
<syntaxhighlight lang="clu">series_sum = proc (from, to: int,
fn: proctype (real) returns (real))
returns (real)
sum: real := 0.0
for i: int in int$from_to(from, to) do
sum := sum + fn(real$i2r(i))
end
return(sum)
end series_sum
 
one_over_k_squared = proc (k: real) returns (real)
return(1.0 / (k * k))
end one_over_k_squared
 
start_up = proc ()
po: stream := stream$primary_output()
result: real := series_sum(1, 1000, one_over_k_squared)
stream$putl(po, f_form(result, 1, 6))
end start_up</syntaxhighlight>
{{out}}
<pre>1.643935</pre>
 
=={{header|COBOL}}==
<langsyntaxhighlight lang="cobol"> IDENTIFICATION DIVISION.
PROGRAM-ID. sum-of-series.
 
Line 301 ⟶ 653:
 
GOBACK
.</langsyntaxhighlight>
{{out}}
<pre>
Line 308 ⟶ 660:
 
=={{header|CoffeeScript}}==
<syntaxhighlight lang="coffeescript">
<lang CoffeeScript>
console.log [1..1000].reduce((acc, x) -> acc + (1.0 / (x*x)))
</syntaxhighlight>
</lang>
 
=={{header|Common Lisp}}==
<langsyntaxhighlight lang="lisp">(loop for x from 1 to 1000 summing (expt x -2))</langsyntaxhighlight>
 
=={{header|Crystal}}==
{{trans|Ruby}}
<syntaxhighlight lang="ruby">puts (1..1000).sum{ |x| 1.0 / x ** 2 }
puts (1..5000).sum{ |x| 1.0 / x ** 2 }
puts (1..9999).sum{ |x| 1.0 / x ** 2 }
puts Math::PI ** 2 / 6</syntaxhighlight>
{{out}}
<pre>
1.6439345666815615
1.6447340868469014
1.6448340618480652
1.6449340668482264
</pre>
 
=={{header|D}}==
===More Procedural Style===
<langsyntaxhighlight lang="d">import std.stdio, std.traits;
 
ReturnType!TF series(TF)(TF func, int end, int start=1)
Line 329 ⟶ 695:
void main() {
writeln("Sum: ", series((in int n) => 1.0L / (n ^^ 2), 1_000));
}</langsyntaxhighlight>
{{out}}
<pre>Sum: 1.64393</pre>
Line 335 ⟶ 701:
===More functional Style===
Same output.
<langsyntaxhighlight lang="d">import std.stdio, std.algorithm, std.range;
 
enum series(alias F) = (in int end, in int start=1)
Line 342 ⟶ 708:
void main() {
writeln("Sum: ", series!q{1.0L / (a ^^ 2)}(1_000));
}</langsyntaxhighlight>
 
=={{header|dc}}==
<syntaxhighlight lang="dc">20 k 0 [ln 1 + d sn _2 ^ + 1000 ln <l] d sl x p</syntaxhighlight>
{{out}}
<pre>1.64393456668155979824</pre>
 
=={{header|Dart}}==
{{trans|Scala}}
<syntaxhighlight lang="dart">main() {
var list = new List<int>.generate(1000, (i) => i + 1);
 
num sum = 0;
 
(list.map((x) => 1.0 / (x * x))).forEach((num e) {
sum += e;
});
print(sum);
}</syntaxhighlight>
 
{{trans|F#}}
<syntaxhighlight lang="dart">f(double x) {
if (x == 0)
return x;
else
return (1.0 / (x * x)) + f(x - 1.0);
}
 
main() {
print(f(1000));
}</syntaxhighlight>
 
=={{header|Delphi}}==
<syntaxhighlight lang="delphi">
<lang Delphi>
unit Form_SumOfASeries_Unit;
 
Line 393 ⟶ 789:
end.
 
</syntaxhighlight>
</lang>
{{out}}
<pre>1.64393456668156</pre>
Line 399 ⟶ 795:
=={{header|DWScript}}==
 
<langsyntaxhighlight lang="delphi">
var s : Float;
for var i := 1 to 1000 do
Line 405 ⟶ 801:
 
PrintLn(s);
</syntaxhighlight>
</lang>
 
=={{header|Dyalect}}==
 
{{trans|Swift}}
 
<syntaxhighlight lang="dyalect">func Integer.SumSeries() {
var ret = 0
 
for i in 1..this {
ret += 1 / pow(Float(i), 2)
}
 
ret
}
var x = 1000
print(x.SumSeries())</syntaxhighlight>
 
{{out}}
 
<pre>1.6439345666815615</pre>
 
=={{header|E}}==
 
<langsyntaxhighlight lang="e">pragma.enable("accumulator")
accum 0 for x in 1..1000 { _ + 1 / x ** 2 }</langsyntaxhighlight>
 
=={{header|EasyLang}}==
<syntaxhighlight lang="easylang">
numfmt 8 0
for i = 1 to 1000
s += 1 / (i * i)
.
print s
</syntaxhighlight>
 
=={{header|EchoLisp}}==
<langsyntaxhighlight lang="lisp">
(lib 'math) ;; for (sigma f(n) nfrom nto) function
(Σ (λ(n) (// (* n n))) 1 1000)
Line 422 ⟶ 848:
(// (* PI PI) 6)
→ 1.6449340668482264
</syntaxhighlight>
</lang>
 
=={{header|EDSAC order code}}==
Real numbers on EDSAC were restricted to the range -1 <= x < 1. The posted solution cheats slightly by omitting the term with k = 1, while printing '1' before the decimal part. The first eight decimals of the output are correct; the last two should be 67 not 41.
 
In floating-point arithmetic, summing the smallest terms first is more accurate than summing the largest terms first, as can be seen e.g. in the Pascal solution. EDSAC used fixed-point arithmetic, so the order of summation makes no difference.
<syntaxhighlight lang="edsac">
[Sum of a series, Rosetta Code website.
EDSAC program, Initial Orders 2.]
..PZ [blank tape and terminator]
 
[Library subroutine D6 - Division, accurate, fast.
36 locations, working positons 6D and 8D.
C(0D) := C(0D)/C(4D), where C(4D) <> 0, -1.]
T56K
GKA3FT34@S4DE13@T4DSDTDE2@T4DADLDTDA4DLDE8@RDU4DLDA35@
T6DE25@U8DN8DA6DT6DH6DS6DN4DA4DYFG21@SDVDTDEFW1526D
 
[Library subroutine P1 - Print positive number, no formatting or round-off.
Prints number in 0D to n places of decimals, where n is specified by 'P n F'
pseudo-order after subroutine call. 21 locations.]
T92K
GKA18@U17@S20@T5@H19@PFT5@VDUFOFFFSFL4FTDA5@A2FG6@EFU3FJFM1F
 
[Custom subroutine to calculate 1/k^2 for a 17-bit integer k > 1.
Input: 0F = k (with the usual scaling; actually k/(2^16).
Output: 0D = 1/k^2.]
T120K GK
A3F T11@ [set up return to caller as usual]
HF [multiply register := k/(2^16)]
VF [acc := k/(2^16) squared]
[At this point acc =(k^2)/(2^32). Now we switch to 35-bit
arithmetic, in which integers are scaled by 2^(-34)]
R1F [shift acc 2 right to adjust scaling]
T4D [4D := k^2]
TD [set 0D := 0; clears "sandwich bit" between 0F and 1F]
A12@ TF [set 0D := 1 by setting 0F := 1]
A9@ G56F [call EDSAC library subroutine for division]
[11] ZF [overwritten by jump back to caller]
[12] PD [short constant 1]
 
[Main program]
T200K GK [load at even address because of long variable at 0]
[0] PF PF [build sum here]
[2] PD [short constant 1]
[3] P500F [short constant 1000]
[4] K2048F #F !F @F &F [letters, figures, space, CR, LF]
[9] HF IF LF [letters H, I, L (in letters mode)]
[12] QF MF [digit 1, dot (in figures mode)]
[14] PF [variable k]
 
[15] T#@ A2@ T14@ [sum := 0, k := 1]
[18] TF A14@ A2@ U14@ TF [inc k; pass new k to function in 0F]
A23@ G120F [call function; places 1/k^2 at 0D]
AD A#@ T#@ [add 1/k^2 into sum]
A14@ S3@ G18@ [test for k = maximum, loop back if not]
O4@ O11@ O89@ O6@ O15@ O89@ O6@ O9@ O10@ O6@ [print 'LO TO HI ']
O5@ O12@ O13@ [print '1.']
A#@ TD A46@ G92F [call subroutine to print decimal part]
P10F [parameter for print subroutine; 10 decimal places]
O7@ O8@ [print CR, LF]
 
[Sum in reverse order to confirm that the result is identical on EDSAC.
Not much different from the above, so given in condensed form.]
TFT#@A3@T14@TFA14@TFA58@G120FADA#@T#@A14@S2@U14@S2FE55@TDA#@TD
O4@O9@O10@O6@O15@O89@O6@O11@O89@O6@O5@O12@O13@A84@G92FP10FO7@O8@
 
[89] O5@ ZF [flush teleprinter buffer; stop]
E15Z PF [define entry point; enter with acc = 0]
</syntaxhighlight>
{{out}}
<pre>
LO TO HI 1.6439345641
HI TO LO 1.6439345641
</pre>
 
=={{header|Eiffel}}==
<langsyntaxhighlight lang="eiffel">
note
description: "Compute the n-th term of a series"
Line 477 ⟶ 977:
end
 
</syntaxhighlight>
</lang>
 
=={{header|Elena}}==
ELENA 6.x :
<syntaxhighlight lang="elena">import system'routines;
import extensions;
public program()
{
var sum := new Range(1, 1000).selectBy::(x => 1.0r / (x * x)).summarize(new Real());
console.printLine(sum)
}</syntaxhighlight>
{{out}}
<pre>
1.643933566682
</pre>
 
=={{header|Elixir}}==
<langsyntaxhighlight lang="elixir">iex(1)> Enum.reduce(1..1000, 0, fn x,sum -> sum + 1/(x*x) end)
1.6439345666815615</langsyntaxhighlight>
 
=={{header|Emacs Lisp}}==
<lang Emacs Lisp>
(defun serie (n)
(if (< 0 n)
(apply '+ (mapcar (lambda (k) (/ 1.0 (* k k) )) (number-sequence 1 n) ))
(error "input error") ))
 
=={{header|Elm}}==
(insert (format "%.10f" (serie 1000) ))
</syntaxhighlight lang="elm">
module Main exposing (main)
<b>Output:</b>
 
import Html exposing (h1, div, p, text)
import Html.Attributes exposing (style)
 
aList : List Int
aList = List.range 1 1000
 
 
-- version a with a list
k2xSum : Float
k2xSum = List.sum
<| List.map (\x -> 1.0 / x / x )
<| List.map (\n -> toFloat n) aList
 
 
-- version b with a list
fx : Int -> Float
fx =
(\n -> toFloat n |> \m -> 1.0 / m / m)
 
f2kSum : Float
f2kSum = List.sum
<| List.map fx aList
 
-- version with recursion, without a list
untilMax : Int -> Int -> Float -> Float
untilMax k kmax accum =
if k > kmax
then accum
else
let
x = toFloat k
dx = 1.0 / x / x
in untilMax (k + 1) kmax (accum + dx)
 
recSum : Float
recSum = untilMax 1 1000 0.0
 
main = div [style "margin" "5%", style "color" "blue"] [
h1 [] [text "Sum of series Σ 1/k²"]
, text (" Version a with a list: Sum = " ++ String.fromFloat k2xSum)
, p [] [text (" Version b with a list: Sum = " ++ String.fromFloat f2kSum)]
, p [] [text (" Recursion version c: Sum = " ++ String.fromFloat recSum)]
]
</syntaxhighlight>
 
{{Out}}
<pre>
Sum of series Σ 1/k²
1.6439345667
Version a with a list: Sum = 1.6439345666815615
 
Version b with a list: Sum = 1.6439345666815615
 
Recursion version c: Sum = 1.6439345666815615
</pre>
 
=={{header|Emacs Lisp}}==
<syntaxhighlight lang="lisp">(defun series (n)
(when (<= n 0)
(user-error "n must be positive"))
(apply #'+ (mapcar (lambda (k) (/ 1.0 (* k k))) (number-sequence 1 n))))
 
(format "%.10f" (series 1000)) ;=> "1.6439345667"</syntaxhighlight>
 
=={{header|Erlang}}==
 
<langsyntaxhighlight lang="erlang">lists:sum([1/math:pow(X,2) || X <- lists:seq(1,1000)]).</langsyntaxhighlight>
 
=={{header|Euphoria}}==
{{works with|Euphoria|4.0.0}}
This is based on the [[BASIC]] example.
<syntaxhighlight lang="euphoria">
<lang Euphoria>
function s( atom x )
return 1 / power( x, 2 )
Line 517 ⟶ 1,087:
end function
 
printf( 1, "%.15f\n", sum( 1, 1000 ) )</langsyntaxhighlight>
 
=={{header|Excel}}==
===LAMBDA===
 
Binding the names '''sumOfSeries''', and '''inverseSquare''' to the following lambda expressions in the Name Manager of the Excel WorkBook:
 
(See [https://www.microsoft.com/en-us/research/blog/lambda-the-ultimatae-excel-worksheet-function/ LAMBDA: The ultimate Excel worksheet function])
 
Excel automatically lifts a function over a scalar to a function over an array:
 
{{Works with|Office 365 betas 2021}}
<syntaxhighlight lang="lisp">sumOfSeries
=LAMBDA(f,
LAMBDA(n,
SUM(
f(SEQUENCE(n, 1, 1, 1))
)
)
)
 
 
inverseSquare
=LAMBDA(n,
1 / (n ^ 2)
)</syntaxhighlight>
 
{{Out}}
{| class="wikitable"
|-
|||style="text-align:right; font-family:serif; font-style:italic; font-size:120%;"|fx
! colspan="2" style="text-align:left; vertical-align: bottom; font-family:Arial, Helvetica, sans-serif !important;"|=sumOfSeries(inverseSquare)(A2)
|- style="text-align:center; font-family:Arial, Helvetica, sans-serif !important; background-color:#000000; color:#ffffff;"
|
| A
| B
|-
| style="text-align:center; font-family:Arial, Helvetica, sans-serif !important; background-color:#000000; color:#ffffff" | 1
| style="font-weight:bold" | N terms
| style="font-weight:bold" | Sum of inverse square series
|-
| style="text-align:center; font-family:Arial, Helvetica, sans-serif !important; background-color:#000000; color:#ffffff" | 2
| style="text-align:right; font-weight:bold" | 1
| style="text-align:right; background-color:#cbcefb" | 1
|-
| style="text-align:center; font-family:Arial, Helvetica, sans-serif !important; background-color:#000000; color:#ffffff" | 3
| style="text-align:right; font-weight:bold" | 10
| style="text-align:right" | 1.5497677311665408
|-
| style="text-align:center; font-family:Arial, Helvetica, sans-serif !important; background-color:#000000; color:#ffffff" | 4
| style="text-align:right; font-weight:bold" | 100
| style="text-align:right" | 1.63498390018489
|-
| style="text-align:center; font-family:Arial, Helvetica, sans-serif !important; background-color:#000000; color:#ffffff" | 5
| style="text-align:right; font-weight:bold" | 1000
| style="text-align:right" | 1.64393456668156
|}
 
=={{header|Ezhil}}==
<syntaxhighlight lang="ezhil">
<lang Ezhil>
## இந்த நிரல் தொடர் கூட்டல் (Sum Of Series) என்ற வகையைச் சேர்ந்தது
 
Line 546 ⟶ 1,172:
பதிப்பி "அதன் தொடர்க் கூட்டல் " தொடர்க்கூட்டல்(அ)
 
</syntaxhighlight>
</lang>
 
=={{header|F_Sharp|F#}}==
The following function will do the task specified.
<syntaxhighlight lang="fsharp">let rec f (x : float) =
match x with
| 0. -> x
| x -> (1. / (x * x)) + f (x - 1.)</syntaxhighlight>
In the interactive F# console, using the above gives:
<syntaxhighlight lang="fsharp">> f 1000. ;;
val it : float = 1.643934567</syntaxhighlight>
However, this recursive function will run out of stack space eventually (try 100000). A [[:Category:Recursion|tail-recursive]] implementation will not consume stack space and can therefore handle much larger ranges. Here is such a version:
<syntaxhighlight lang="fsharp">#light
let sum_series (max : float) =
let rec f (a:float, x : float) =
match x with
| 0. -> a
| x -> f ((1. / (x * x) + a), x - 1.)
f (0., max)
 
[<EntryPoint>]
let main args =
let (b, max) = System.Double.TryParse(args.[0])
printfn "%A" (sum_series max)
0</syntaxhighlight>
This block can be compiled using ''fsc --target exe filename.fs'' or used interactively without the main function.
 
For a much more elegant and FP style of solving this problem, use:
<syntaxhighlight lang="fsharp">
Seq.sum [for x in [1..1000] do 1./(x * x |> float)]
</syntaxhighlight>
 
=={{header|Factor}}==
<langsyntaxhighlight lang="factor">1000 [1,b] [ >float sq recip ] map-sum</langsyntaxhighlight>
 
=={{header|Fantom}}==
Line 555 ⟶ 1,211:
Within 'fansh':
 
<langsyntaxhighlight lang="fantom">
fansh> (1..1000).toList.reduce(0.0f) |Obj a, Int v -> Obj| { (Float)a + (1.0f/(v*v)) }
1.6439345666815615
</syntaxhighlight>
</lang>
 
=={{header|Fermat}}==
<syntaxhighlight lang="fermat">Sigma<k=1,1000>[1/k^2]</syntaxhighlight>
{{out}}
<pre>
83545938483149689478187854264854884386044454314086472930763839512603803291207881839588904977469387999844962675327115010933 `
903589145654299730231109091124308462732153297321867661093162618281746011828755017021645889046777854795025297006943669294 `
330752479399654716368801794529682603741344724733173765262964463970763934463926259796895140901128384286333311745462863716 `
753134735154188954742414035836608258393970996630553795415075904205673610359458498106833291961256452756993199997231825920 `
203667952667546787052535763624910912251107083702817265087341966845358732584971361645348091123849687614886682117125784781 `
422103460192439394780707024963279033532646857677925648889105430050030795563141941157379481719403833258405980463950499887 `
302926152552848089894630843538497552630691676216896740675701385847032173192623833881016332493844186817408141003602396236 `
858699094240207812766449 / 50820720104325812617835292273000760481839790754374852703215456050992581046448162621598030244504097 `
240825920773913981926305208272518886258627010933716354037062979680120674828102224650586465553482032614190502746121717248 `
161892239954030493982549422690846180552358769564169076876408783086920322038142618269982747137757706040198826719424371333 `
781947889528085329853597116893889786983109597085041878513917342099206896166585859839289193299599163669641323895022932959 `
750057616390808553697984192067774252834860398458100840611325353202165675189472559524948330224159123505567527375848194800 `
452556940453530457590024173749704941834382709198515664897344438584947842793131829050180589581507273988682409028088248800 `
576590497216884808783192565859896957125449502802395453976401743504938336291933628859306247684023233969172475385327442707 `
968328512729836445886537101453118476390400000000; or 1.6439345666815598031390580238222155896521
</pre>
 
=={{header|Fish}}==
<syntaxhighlight lang="fish">0&aaa**>::*1$,&v
;n&^?:-1&+ <</syntaxhighlight>
 
=={{header|Forth}}==
<langsyntaxhighlight lang="forth">: sum ( fn start count -- fsum )
0e
bounds do
Line 569 ⟶ 1,250:
:noname ( x -- 1/x^2 ) fdup f* 1/f ; ( xt )
1 1000 sum f. \ 1.64393456668156
pi pi f* 6e f/ f. \ 1.64493406684823</langsyntaxhighlight>
 
=={{header|Fortran}}==
In ISO Fortran 90 and later, use SUM intrinsic:
<langsyntaxhighlight lang="fortran">real, dimension(1000) :: a = (/ (1.0/(i*i), i=1, 1000) /)
real :: result
 
result = sum(a);</langsyntaxhighlight>
Or in Fortran 77:
=={{header|F_Sharp|F#}}==
<syntaxhighlight lang="fortran"> s=0
The following function will do the task specified.
do i=1,1000
<lang fsharp>let rec f (x : float) =
match x with s=s+1./i**2
end | 0. -> xdo
| x ->write (1. / (x * x),*) + f (x - 1.)</lang>s
end</syntaxhighlight>
In the interactive F# console, using the above gives:
 
<lang fsharp>> f 1000. ;;
=={{header|FreeBASIC}}==
val it : float = 1.643934567</lang>
<syntaxhighlight lang="freebasic">' FB 1.05.0 Win64
However this recursive function will run out of stack space eventually (try 100000). A [[:Category:Recursion|tail-recursive]] implementation will not consume stack space and can therefore handle much larger ranges. Here is such a version:
 
<lang fsharp>#light
Const pi As Double = 3.141592653589793
let sum_series (max : float) =
 
let rec f (a:float, x : float) =
Function sumSeries (n As UInteger) As Double
match x with
If n = 0 Then |Return 0. -> a
Dim sum As Double = 0
| x -> f ((1. / (x * x) + a), x - 1.)
For k fAs (0.,Integer max)= 1 To n
sum += 1.0/(k * k)
Next
Return sum
End Function
 
Print "s(1000) = "; sumSeries(1000)
Print "zeta(2) = "; Pi * pi / 6
Print
Print "Press any key to quit"
Sleep</syntaxhighlight>
 
{{out}}
<pre>
s(1000) = 1.643934566681562
zeta(2) = 1.644934066848226
</pre>
 
=={{header|Frink}}==
Frink can calculate the series with exact rational numbers or floating-point values.
<syntaxhighlight lang="frink">
sum[map[{|k| 1/k^2}, 1 to 1000]]
</syntaxhighlight>
{{out}}
<pre>
83545938483149689478187854264854884386044454314086472930763839512603803291207881839588904977469387999844962675327115010933903589145654299730231109091124308462732153297321867661093162618281746011828755017021645889046777854795025297006943669294330752479399654716368801794529682603741344724733173765262964463970763934463926259796895140901128384286333311745462863716753134735154188954742414035836608258393970996630553795415075904205673610359458498106833291961256452756993199997231825920203667952667546787052535763624910912251107083702817265087341966845358732584971361645348091123849687614886682117125784781422103460192439394780707024963279033532646857677925648889105430050030795563141941157379481719403833258405980463950499887302926152552848089894630843538497552630691676216896740675701385847032173192623833881016332493844186817408141003602396236858699094240207812766449/50820720104325812617835292273000760481839790754374852703215456050992581046448162621598030244504097240825920773913981926305208272518886258627010933716354037062979680120674828102224650586465553482032614190502746121717248161892239954030493982549422690846180552358769564169076876408783086920322038142618269982747137757706040198826719424371333781947889528085329853597116893889786983109597085041878513917342099206896166585859839289193299599163669641323895022932959750057616390808553697984192067774252834860398458100840611325353202165675189472559524948330224159123505567527375848194800452556940453530457590024173749704941834382709198515664897344438584947842793131829050180589581507273988682409028088248800576590497216884808783192565859896957125449502802395453976401743504938336291933628859306247684023233969172475385327442707968328512729836445886537101453118476390400000000 (approx. 1.6439345666815598)
</pre>
Change <code>1/k^2</code> to <code>1.0/k^2</code> to use floating-point math.
 
=={{header|Fōrmulæ}}==
 
{{FormulaeEntry|page=https://formulae.org/?script=examples/Sum_of_a_series}}
 
'''Solution'''
 
In the following function, the first parameter is the series is provided as a lambda expression. The second parameter is the number of terms to calculate
 
[[File:Fōrmulæ - Sum of a series 01.png]]
 
'''Test case'''
 
The exact value (of the sum) is:
 
[[File:Fōrmulæ - Sum of a series 02.png]]
 
(click to enlarge)
 
[[File:Fōrmulæ - Sum of a series 03.png|750px||link=https://static.wikiforge.net/rosettacodewikitide/0/0f/F%C5%8Drmul%C3%A6_-_Sum_of_a_series_03.png]]
 
The approximate value is:
 
[[File:Fōrmulæ - Sum of a series 04.png]]
 
[[File:Fōrmulæ - Sum of a series 05.png]]
 
While the (approximate) value of π<sup>2</sup>/6 is:
 
[[File:Fōrmulæ - Sum of a series 06.png]]
 
[[File:Fōrmulæ - Sum of a series 07.png]]
 
[<EntryPoint>]
let main args =
let (b, max) = System.Double.TryParse(args.[0])
printfn "%A" (sum_series max)
0</lang>
This block can be compiled using ''fsc --target exe filename.fs'' or used interactively without the main function.
=={{header|GAP}}==
<langsyntaxhighlight lang="gap"># We will compute the sum exactly
 
# Computing an approximation of a rationnal (giving a string)
Line 633 ⟶ 1,367:
Approx(a, 10);
"1.6439345666"
# and pi^2/6 is 1.6449340668, truncated to ten digits</langsyntaxhighlight>
 
=={{header|Genie}}==
<syntaxhighlight lang="genie">[indent=4]
/*
Sum of series, in Genie
valac sumOfSeries.gs
./sumOfSeries
*/
 
delegate sumFunc(n:int):double
 
def sum_series(start:int, end:int, f:sumFunc):double
sum:double = 0.0
for var i = start to end do sum += f(i)
return sum
 
 
def oneOverSquare(n:int):double
return (1 / (double)(n * n))
 
init
Intl.setlocale()
print "ζ(2) approximation: %16.15f", sum_series(1, 1000, oneOverSquare)
print "π² / 6 : %16.15f", Math.PI * Math.PI / 6.0</syntaxhighlight>
 
{{out}}
<pre>prompt$ valac sumOfSeries.gs
prompt$ ./sumOfSeries
ζ(2) approximation: 1.643934566681561
π² / 6 : 1.644934066848226</pre>
 
=={{header|GEORGE}}==
<syntaxhighlight lang="george">
<lang GEORGE>
0 (s)
1, 1000 rep (i)
Line 642 ⟶ 1,406:
]
P
</syntaxhighlight>
</lang>
Output:-
<pre>
Line 649 ⟶ 1,413:
 
=={{header|Go}}==
<langsyntaxhighlight lang="go">package main
 
import ("fmt"; "math")
Line 660 ⟶ 1,424:
}
fmt.Println("computed:", sum)
}</langsyntaxhighlight>
Output:
<pre>known: 1.6449340668482264
Line 667 ⟶ 1,431:
=={{header|Groovy}}==
Start with smallest terms first to minimize rounding error:
<langsyntaxhighlight lang="groovy">println ((1000..1).collect { x -> 1/(x*x) }.sum())</langsyntaxhighlight>
 
Output:
Line 674 ⟶ 1,438:
=={{header|Haskell}}==
With a list comprehension:
<langsyntaxhighlight lang="haskell">sum [1 / x ^ 2 | x <- [1..1000]]</langsyntaxhighlight>
With higher-order functions:
<langsyntaxhighlight lang="haskell">sum $ map (\x -> 1 / x ^ 2) [1..1000]</langsyntaxhighlight>
In [http://haskell.org/haskellwiki/Pointfree point-free] style:
<langsyntaxhighlight lang="haskell">(sum . map (1/) . map (^2)) [1..1000]</langsyntaxhighlight>
or
<syntaxhighlight lang="haskell">(sum . map ((1 /) . (^ 2))) [1 .. 1000]</syntaxhighlight>
 
or, as a single fold:
 
<syntaxhighlight lang="haskell">seriesSum f = foldr ((+) . f) 0
 
inverseSquare = (1 /) . (^ 2)
 
main :: IO ()
main = print $ seriesSum inverseSquare [1 .. 1000]</syntaxhighlight>
{{Out}}
<pre>1.6439345666815615</pre>
 
=={{header|Haxe}}==
===Procedural===
<syntaxhighlight lang="haxe">using StringTools;
 
class Main {
static function main() {
var sum = 0.0;
for (x in 1...1001)
sum += 1.0/(x * x);
Sys.println('Approximation: $sum');
Sys.println('Exact: '.lpad(' ', 15) + Math.PI * Math.PI / 6);
}
}</syntaxhighlight>
 
{{out}}
<pre>
Approximation: 1.64393456668156146
Exact: 1.64493406684822641
</pre>
 
===Functional===
<syntaxhighlight lang="haxe">using Lambda;
using StringTools;
 
class Main {
static function main() {
var approx = [for (x in 1...1001) x].fold(function(x, sum) return sum += 1.0 / (x * x), 0);
Sys.println('Approximation: $approx');
Sys.println('Exact: '.lpad(' ', 15) + Math.PI * Math.PI / 6);
}
}</syntaxhighlight>
 
{{out}}
<pre>Same as for procedural</pre>
 
=={{header|HicEst}}==
<langsyntaxhighlight lang="hicest">REAL :: a(1000)
a = 1 / $^2
WRITE(ClipBoard, Format='F17.15') SUM(a) </langsyntaxhighlight>
<syntaxhighlight lang ="hicest">1.643934566681561</langsyntaxhighlight>
 
=={{header|Icon}} and {{header|Unicon}}==
<langsyntaxhighlight lang="icon">procedure main()
local i, sum
sum := 0 & i := 0
every sum +:= 1.0/((| i +:= 1 ) ^ 2) \1000
write(sum)
end</langsyntaxhighlight>
 
or
 
<langsyntaxhighlight lang="icon">procedure main()
every (sum := 0) +:= 1.0/((1 to 1000)^2)
write(sum)
end</langsyntaxhighlight>
 
Note: The terse version requires some explanation. Icon expressions all return values or references if they succeed. As a result, it is possible to have expressions like these below:
<langsyntaxhighlight lang="icon">
x := y := 0 # := is right associative so, y is assigned 0, then x
1 < x < 99 # comparison operators are left associative so, 1 < x returns x (if it is greater than 1), then x < 99 returns 99 if the comparison succeeds
(sum := 0) # returns a reference to sum which can in turn be used with augmented assignment +:=
</syntaxhighlight>
</lang>
 
=={{header|IDL}}==
 
<langsyntaxhighlight lang="idl">print,total( 1/(1+findgen(1000))^2)</langsyntaxhighlight>
 
=={{header|Io}}==
<pre>Io 20110905
Io> sum := 0 ; Range 1 to(1000) foreach(k, sum = sum + 1/(k*k))
==> 1.6439345666815615
Io> 1 to(1000) map(k, 1/(k*k)) sum
==> 1.6439345666815615
Io></pre>
The expression using <code>map</code> generates a list internally. Using <code>foreach</code> does not.
 
=={{header|J}}==
<langsyntaxhighlight lang="j"> NB. sum of reciprocals of squares of first thousand positive integers
+/ % *: >: i. 1000
1.64393
Line 721 ⟶ 1,542:
1r6p2 NB. As a constant (J has a rich constant notation)
1.64493</langsyntaxhighlight>
 
=={{header|Java}}==
<langsyntaxhighlight lang="java">public class Sum{
public static double f(double x){
return 1/(x*x);
Line 738 ⟶ 1,559:
System.out.println("Sum of f(x) from " + start + " to " + end +" is " + sum);
}
}</langsyntaxhighlight>
 
=={{header|JavaScript}}==
===ES5===
<lang javascript>function sum(a,b,fn) {
<syntaxhighlight lang="javascript">function sum(a,b,fn) {
var s = 0;
for ( ; a <= b; a++) s += fn(a);
Line 747 ⟶ 1,569:
}
sum(1,1000, function(x) { return 1/(x*x) } ) // 1.64393456668156</langsyntaxhighlight>
 
or, in a functional idiom:
 
<syntaxhighlight lang="javascript">(function () {
 
function sum(fn, lstRange) {
return lstRange.reduce(
function (lngSum, x) {
return lngSum + fn(x);
}, 0
);
}
 
function range(m, n) {
return Array.apply(null, Array(n - m + 1)).map(function (x, i) {
return m + i;
});
}
 
 
return sum(
function (x) {
return 1 / (x * x);
},
range(1, 1000)
);
 
})();</syntaxhighlight>
 
{{Out}}
 
<syntaxhighlight lang="javascript">1.6439345666815615</syntaxhighlight>
 
===ES6===
{{Trans|Haskell}}
<syntaxhighlight lang="javascript">(() => {
'use strict';
 
// SUM OF A SERIES -------------------------------------------------------
 
// seriesSum :: Num a => (a -> a) -> [a] -> a
const seriesSum = (f, xs) =>
foldl((a, x) => a + f(x), 0, xs);
 
 
// GENERIC ---------------------------------------------------------------
 
// enumFromToInt :: Int -> Int -> [Int]
const enumFromTo = (m, n) =>
Array.from({
length: Math.floor(n - m) + 1
}, (_, i) => m + i);
 
// foldl :: (b -> a -> b) -> b -> [a] -> b
const foldl = (f, a, xs) => xs.reduce(f, a);
 
// TEST ------------------------------------------------------------------
 
return seriesSum(x => 1 / (x * x), enumFromTo(1, 1000));
})();</syntaxhighlight>
{{Out}}
<syntaxhighlight lang="javascript">1.6439345666815615</syntaxhighlight>
 
=={{header|Joy}}==
<syntaxhighlight lang="joy">1000 [0] [swap -2 pow +] primrec.</syntaxhighlight>
{{out}}
<pre>1.64393</pre>
 
=={{header|jq}}==
Line 753 ⟶ 1,642:
 
Directly:
<langsyntaxhighlight lang="jq">def s(n): reduce range(1; n+1) as $k (0; . + 1/($k * $k) );
 
s(1000)
</syntaxhighlight>
</lang>
{{Out}}
1.6439345666815615
Line 762 ⟶ 1,651:
Using a generic summation wrapper function allows problems specified in "sigma" notation to be solved using syntax that closely resembles that notation:
 
<langsyntaxhighlight lang="jq">def summation(s): reduce s as $k (0; . + $k);
 
summation( range(1; 1001) | (1/(. * .) ) )</langsyntaxhighlight>
 
An important point is that nothing is lost in efficiency using the declarative and quite elegant approach using "summation".
 
=={{header|Jsish}}==
From Javascript ES5.
 
<syntaxhighlight lang="javascript">#!/usr/bin/jsish
/* Sum of a series */
function sum(a:number, b:number , fn:function):number {
var s = 0;
for ( ; a <= b; a++) s += fn(a);
return s;
}
 
;sum(1, 1000, function(x) { return 1/(x*x); } );
 
/*
=!EXPECTSTART!=
sum(1, 1000, function(x) { return 1/(x*x); } ) ==> 1.643934566681561
=!EXPECTEND!=
*/</syntaxhighlight>
 
{{out}}
<pre>prompt$ jsish --U sumOfSeries.jsi
sum(1, 1000, function(x) { return 1/(x*x); } ) ==> 1.643934566681561</pre>
 
=={{header|Julia}}==
Using a higher-order function:
 
<langsyntaxhighlight Julialang="julia">julia> sum(k -> 1/k^2, 1:1000)
1.643934566681559
 
julia> pi^2/6
1.6449340668482264
</syntaxhighlight>
</lang>
 
A simple loop is more optimized:
 
<langsyntaxhighlight Julialang="julia">julia> function f(n)
s = 0.0
for k = 1:n
Line 789 ⟶ 1,701:
 
julia> f(1000)
1.6439345666815615</langsyntaxhighlight>
 
=={{header|K}}==
<langsyntaxhighlight lang="k"> ssr: +/1%_sqr
ssr 1+!1000
1.643935</langsyntaxhighlight>
 
=={{header|Kotlin}}==
<syntaxhighlight lang="scala">// version 1.0.6
 
fun main(args: Array<String>) {
val n = 1000
val sum = (1..n).sumByDouble { 1.0 / (it * it) }
println("Actual sum is $sum")
println("zeta(2) is ${Math.PI * Math.PI / 6.0}")
}</syntaxhighlight>
 
{{out}}
<pre>
Actual sum is 1.6439345666815615
zeta(2) is 1.6449340668482264
</pre>
 
=={{header|Lambdatalk}}==
<syntaxhighlight lang="lisp">
{+ {S.map {lambda {:k} {/ 1 {* :k :k}}} {S.serie 1 1000}}}
-> 1.6439345666815615 ~ 1.6449340668482264 = PI^2/6
</syntaxhighlight>
 
=={{header|Lang5}}==
<langsyntaxhighlight lang="lang5">1000 iota 1 + 1 swap / 2 ** '+ reduce .</langsyntaxhighlight>
 
=={{header|langur}}==
<syntaxhighlight lang="langur">writeln "calc.: ", fold fn{+}, map fn(.x) { 1/.x^2 }, 1..1000
writeln "known: ", pi^2/6</syntaxhighlight>
 
{{out}}
<pre>calc.: 1.643934566681559803139058023822206
exact: 1.644934066848226436472415166646025
</pre>
 
If we set a higher arbitrary maximum for division, we get more digits.
 
<syntaxhighlight lang="langur">mode divMaxScale = 100
 
writeln "calc.: ", fold fn{+}, map fn(.x) 1/.x^2, 1..1000
writeln "known: ", pi^2/6</syntaxhighlight>
 
{{out}}
<pre>calc.: 1.6439345666815598031390580238222155896521034464936853167172372054281147052136371544864376381235947140
exact: 1.6449340668482264364724151666460251892189499012067984377355582293700074704032008738336289006197587053
</pre>
 
=={{header|Lasso}}==
<langsyntaxhighlight Lassolang="lasso">define sum_of_a_series(n::integer,k::integer) => {
local(sum = 0)
loop(-from=#k,-to=#n) => {
Line 809 ⟶ 1,762:
return #sum
}
sum_of_a_series(1000,1)</langsyntaxhighlight>
{{out}}
<pre>1.643935</pre>
Line 817 ⟶ 1,770:
=== With <code>lists:foldl</code> ===
 
<langsyntaxhighlight lang="lisp">
(defun sum-series (nums)
(lists:foldl
Line 825 ⟶ 1,778:
(lambda (x) (/ 1 x x))
nums)))
</syntaxhighlight>
</lang>
 
=== With <code>lists:sum</code> ===
 
<langsyntaxhighlight lang="lisp">
(defun sum-series (nums)
(lists:sum
Line 835 ⟶ 1,788:
(lambda (x) (/ 1 x x))
nums)))
</syntaxhighlight>
</lang>
 
Both have the same result:
 
<langsyntaxhighlight lang="lisp">
> (sum-series (lists:seq 1 100000))
1.6449240668982423
</syntaxhighlight>
</lang>
 
=={{header|Liberty BASIC}}==
<syntaxhighlight lang="lb">
<lang lb>
for i =1 to 1000
sum =sum +1 /( i^2)
Line 853 ⟶ 1,806:
 
end
</syntaxhighlight>
</lang>
 
=={{header|Lingo}}==
<syntaxhighlight lang="lingo">the floatprecision = 8
sum = 0
repeat with i = 1 to 1000
sum = sum + 1/power(i, 2)
end repeat
put sum
-- 1.64393457</syntaxhighlight>
 
=={{header|LiveCode}}==
<syntaxhighlight lang="livecode">repeat with i = 1 to 1000
add 1/(i^2) to summ
end repeat
put summ //1.643935</syntaxhighlight>
 
=={{header|Logo}}==
<langsyntaxhighlight lang="logo">to series :fn :a :b
localmake "sigma 0
for [i :a :b] [make "sigma :sigma + invoke :fn :i]
Line 866 ⟶ 1,834:
print series "zeta.2 1 1000
make "pi (radarctan 0 1) * 2
print :pi * :pi / 6</langsyntaxhighlight>
 
=={{header|Lua}}==
<langsyntaxhighlight lang="lua">
sum = 0
for i = 1, 1000 do sum = sum + 1/i^2 end
print(sum)
</syntaxhighlight>
</lang>
 
=={{header|Lucid}}==
<langsyntaxhighlight lang="lucid">series = ssum asa n >= 1000
where
num = 1 fby num + 1;
ssum = ssum + 1/(num * num)
end;</langsyntaxhighlight>
 
=={{header|Maple}}==
<syntaxhighlight lang="maple">sum(1/k^2, k=1..1000);</syntaxhighlight>
{{Out|Output}}
<pre>-Psi(1, 1001)+(1/6)*Pi^2</pre>
 
=={{header|Mathematica}}/{{header|Wolfram Language}}==
This is the straightforward solution of the task:
<langsyntaxhighlight lang="mathematica">Sum[1/x^2, {x, 1, 1000}]</langsyntaxhighlight>
However this returns a quotient of two huge integers (namely the ''exact'' sum); to get a floating point approximation, use <tt>N</tt>:
<langsyntaxhighlight lang="mathematica">N[Sum[1/x^2, {x, 1, 1000}]]</langsyntaxhighlight>
or better:
<langsyntaxhighlight lang="mathematica">NSum[1/x^2, {x, 1, 1000}]</langsyntaxhighlight>
Which gives a higher or equal accuracy/precision. Alternatively, get Mathematica to do the whole calculation in floating point by using a floating point value in the formula:
<langsyntaxhighlight lang="mathematica">Sum[1./x^2, {x, 1, 1000}]</langsyntaxhighlight>
Other ways include (exact, approximate,exact,approximate):
<langsyntaxhighlight lang="mathematica">Total[Table[1/x^2, {x, 1, 1000}]]
Total[Table[1./x^2, {x, 1, 1000}]]
Plus@@Table[1/x^2, {x, 1, 1000}]
Plus@@Table[1./x^2, {x, 1, 1000}]</langsyntaxhighlight>
 
=={{header|MATLAB}}==
<langsyntaxhighlight lang="matlab"> sum([1:1000].^(-2)) </langsyntaxhighlight>
 
=={{header|Maxima}}==
 
<langsyntaxhighlight lang="maxima">(%i45) sum(1/x^2, x, 1, 1000);
835459384831496894781878542648[806 digits]396236858699094240207812766449
(%o45) ------------------------------------------------------------------------
Line 907 ⟶ 1,881:
 
(%i46) sum(1/x^2, x, 1, 1000),numer;
(%o46) 1.643934566681561</langsyntaxhighlight>
 
=={{header|MAXScript}}==
<langsyntaxhighlight lang="maxscript">total = 0
for i in 1 to 1000 do
(
total += 1.0 / pow i 2
)
print total</langsyntaxhighlight>
 
=={{header|min}}==
{{works with|min|0.19.3}}
<syntaxhighlight lang="min">0 1 (
((dup * 1 swap /) (id)) cleave
((+) (succ)) spread
) 1000 times pop print</syntaxhighlight>
{{out}}
<pre>
1.643934566681562
</pre>
 
=={{header|MiniScript}}==
<syntaxhighlight lang="miniscript">zeta = function(num)
return 1 / num^2
end function
 
sum = function(start, finish, formula)
total = 0
for i in range(start, finish)
total = total + formula(i)
end for
return total
end function
 
print sum(1, 1000, @zeta)
</syntaxhighlight>
{{out}}
<pre>
1.643935
</pre>
 
=={{header|МК-61/52}}==
<syntaxhighlight lang="text">0 П0 П1 ИП1 1 + П1 x^2 1/x ИП0
+ П0 ИП1 1 0 0 0 - x>=0 03
ИП0 С/П</langsyntaxhighlight>
 
=={{header|ML}}==
 
==={{header|Standard ML}}===
<syntaxhighlight lang="standard ml">
<lang Standard ML>
(* 1.64393456668 *)
List.foldl op+ 0.0 (List.tabulate(1000, fn x => 1.0 / Math.pow(real(x + 1),2.0)))
</syntaxhighlight>
</lang>
 
==={{header|mLite}}===
<langsyntaxhighlight lang="ocaml">println ` fold (+, 0) ` map (fn x = 1 / x ^ 2) ` iota (1,1000);</langsyntaxhighlight>
Output:
<pre>1.6439345666815549</pre>
 
=={{header|MMIX}}==
<langsyntaxhighlight lang="mmix">x IS $1 % flt calculations
y IS $2 % id
z IS $3 % z = sum series
Line 1,041 ⟶ 2,046:
PBNP t,1B } z = sum
GO $127,prtFlt print sum --> StdOut
TRAP 0,Halt,0</langsyntaxhighlight>
Output:
<pre>~/MIX/MMIX/Rosetta> mmix sumseries
0.1643934566681562e1</pre>
 
=={{header|Modula-2}}==
<syntaxhighlight lang="modula2">MODULE SeriesSum;
FROM InOut IMPORT WriteLn;
FROM RealInOut IMPORT WriteReal;
 
TYPE RealFunc = PROCEDURE (REAL): REAL;
 
PROCEDURE seriesSum(k, n: CARDINAL; f: RealFunc): REAL;
VAR total: REAL;
i: CARDINAL;
BEGIN
total := 0.0;
FOR i := k TO n DO
total := total + f(FLOAT(i));
END;
RETURN total;
END seriesSum;
 
PROCEDURE oneOverKSquared(k: REAL): REAL;
BEGIN
RETURN 1.0 / (k * k);
END oneOverKSquared;
 
BEGIN
WriteReal(seriesSum(1, 1000, oneOverKSquared), 10);
WriteLn;
END SeriesSum.</syntaxhighlight>
{{out}}
<pre>1.6439E+00</pre>
 
=={{header|Modula-3}}==
Modula-3 uses D0 after a floating point number as a literal for <tt>LONGREAL</tt>.
<langsyntaxhighlight lang="modula3">MODULE Sum EXPORTS Main;
 
IMPORT IO, Fmt, Math;
Line 1,066 ⟶ 2,101:
IO.Put(Fmt.LongReal(sum));
IO.Put("\n");
END Sum.</langsyntaxhighlight>
Output:
<pre>
Line 1,073 ⟶ 2,108:
 
=={{header|MUMPS}}==
<syntaxhighlight lang="mumps">
<lang MUMPS>
SOAS(N)
NEW SUM,I SET SUM=0
Line 1,079 ⟶ 2,114:
.SET SUM=SUM+(1/((I*I)))
QUIT SUM
</syntaxhighlight>
</lang>
This is an extrinsic function so the usage is:
<pre>
Line 1,085 ⟶ 2,120:
1.643934566681559806
</pre>
 
=={{header|Nial}}==
<lang nial>|sum (1 / power (count 1000) 2)
=1.64393</lang>
 
=={{header|NewLISP}}==
<langsyntaxhighlight NewLISPlang="newlisp">(let (s 0)
(for (i 1 1000)
(inc s (div 1 (* i i))))
(println s))</langsyntaxhighlight>
 
=={{header|Nial}}==
<syntaxhighlight lang="nial">|sum (1 / power (count 1000) 2)
=1.64393</syntaxhighlight>
 
=={{header|Nim}}==
<syntaxhighlight lang="nim">var s = 0.0
<lang nim>import math
for n in 1..1000: s += 1 / (n * n)
echo s</syntaxhighlight>
 
{{out}}
var ls: seq[float] = @[]
<pre>1.643934566681561</pre>
for x in 1..1000:
 
ls.add(1.0 / float(x * x))
=={{header|Oberon-2}}==
echo sum(ls)</lang>
{{trans|Modula-2}}
<syntaxhighlight lang="oberon2">MODULE SS;
 
IMPORT Out;
 
TYPE
RealFunc = PROCEDURE(r:REAL):REAL;
 
PROCEDURE SeriesSum(k,n:LONGINT;f:RealFunc):REAL;
VAR
total:REAL;
i:LONGINT;
BEGIN
total := 0.0;
FOR i := k TO n DO total := total + f(i) END;
RETURN total
END SeriesSum;
PROCEDURE OneOverKSquared(k:REAL):REAL;
BEGIN RETURN 1.0 / (k * k)
END OneOverKSquared;
BEGIN
Out.Real(SeriesSum(1,1000,OneOverKSquared),10);
Out.Ln;
END SS.
</syntaxhighlight>
 
{{out}}
<pre>1.64393E+00
</pre>
 
=={{header|Objeck}}==
<langsyntaxhighlight lang="objeck">
bundle Default {
class SumSeries {
Line 1,130 ⟶ 2,198:
}
}
</syntaxhighlight>
</lang>
 
=={{header|OCaml}}==
<langsyntaxhighlight lang="ocaml">let sum a b fn =
let result = ref 0. in
for i = a to b do
result := !result +. fn i
done;
!result</langsyntaxhighlight>
 
# sum 1 1000 (fun x -> 1. /. (float x ** 2.))
Line 1,144 ⟶ 2,212:
 
or in a functional programming style:
<langsyntaxhighlight lang="ocaml">let sum a b fn =
let rec aux i r =
if i > b then r
Line 1,150 ⟶ 2,218:
in
aux a 0.
;;</langsyntaxhighlight>
Simple recursive solution:
<langsyntaxhighlight lang="ocaml">let rec sum n = if n < 1 then 0.0 else sum (n-1) +. 1.0 /. float (n*n)
in sum 1000</langsyntaxhighlight>
 
=={{header|Octave}}==
Given a vector, the sum of all its elements is simply <code>sum(vector)</code>; a range can be ''generated'' through the range notation: <code>sum(1:1000)</code> computes the sum of all numbers from 1 to 1000. To compute the requested series, we can simply write:
 
<langsyntaxhighlight lang="octave">sum(1 ./ [1:1000] .^ 2)</langsyntaxhighlight>
 
=={{header|Oforth}}==
 
<langsyntaxhighlight Oforthlang="oforth">: sumSerie(s, n) { 0 n seq apply(#[ s perform + ]) };</langsyntaxhighlight>
 
Usage :
<langsyntaxhighlight Oforthlang="oforth">sumSerie( #[ sq inv ], 1000) sumSerie println</langsyntaxhighlight>
 
{{out}}
Line 1,176 ⟶ 2,244:
Conventionally like elsewhere:
 
<langsyntaxhighlight Progresslang="progress (Openedgeopenedge ABLabl)">def var dcResult as decimal no-undo.
def var n as int no-undo.
 
Line 1,183 ⟶ 2,251:
end.
 
display dcResult .</langsyntaxhighlight>
 
or like this:
 
<langsyntaxhighlight Progresslang="progress (Openedgeopenedge ABLabl)">def var n as int no-undo.
 
repeat n = 1 to 1000 :
Line 1,193 ⟶ 2,261:
end.
 
display ( accum total 1 / (n * n) ) .</langsyntaxhighlight>
 
=={{header|Oz}}==
With higher-order functions:
<langsyntaxhighlight lang="oz">declare
fun {SumSeries S N}
{FoldL {Map {List.number 1 N 1} S}
Line 1,207 ⟶ 2,275:
end
in
{Show {SumSeries S 1000}}</langsyntaxhighlight>
 
Iterative:
<langsyntaxhighlight lang="oz"> fun {SumSeries S N}
R = {NewCell 0.}
in
Line 1,217 ⟶ 2,285:
end
@R
end</langsyntaxhighlight>
 
=={{header|Panda}}==
<syntaxhighlight lang="panda">sum{{1.0.divide(1..1000.sqr)}}</syntaxhighlight>
Output:
<pre>1.6439345666815615</pre>
 
=={{header|PARI/GP}}==
Exact rational solution:
<langsyntaxhighlight lang="parigp">sum(n=1,1000,1/n^2)</langsyntaxhighlight>
 
Real number solution (accurate to <math>3\cdot10^{-36}</math> at standard precision):
<langsyntaxhighlight lang="parigp">sum(n=1,1000,1./n^2)</langsyntaxhighlight>
 
Approximate solution (accurate to <math>9\cdot10^{-11}</math> at standard precision):
<langsyntaxhighlight lang="parigp">zeta(2)-intnum(x=1000.5,[1],1/x^2)</langsyntaxhighlight>
or
<syntaxhighlight lang ="parigp">zeta(2)-1/1000.5</langsyntaxhighlight>
 
=={{header|Panda}}==
<lang panda>sum{{1.0.divide(1..1000.sqr)}}</lang>
Output:
<pre>1.6439345666815615</pre>
 
=={{header|Pascal}}==
<langsyntaxhighlight lang="pascal">Program SumSeries;
type
tOutput = double;//extended;
tmyFunc = function(number: LongInt): tOutput;
 
function f(number: LongInt): tOutput;
begin
f := 1/sqr(tOutput(number));
end;
 
function Sum(from,upto: LongInt;func:tmyFunc):tOutput;
var
Sres: doubletOutput;
i: integer;
 
function f(number: integer): double;
begin
fres := 1/(number*number)0.0;
// for from:= from to upto do res := res + f(from);
for upTo := upto downto from do res := res + f(upTo);
Sum := res;
end;
 
BEGIN
begin
writeln('The sum of 1/x^2 from 1 to 1000 is: ', Sum(1,1000,@f));
S := 0;
for i := 1 to 1000 do
S := S + f(i);
writeln('The sum of 1/x^2 from 1 to 1000 is: ', S:10:8);
writeln('Whereas pi^2/6 is: ', pi*pi/6:10:8);
end.</langsyntaxhighlight>
Output:
<pre>different version of type and calculation
<pre>
extended low to high 1.64393456668155980263E+0000
The sum of a series from 1 to 1000 is: 1.64393457
extended high to low 1.64393456668155980307E+0000
Whereas pi^2/6 is: 1.64493407
double low to high 1.6439345666815612E+000
double high to low 1.6439345666815597E+000
Out:
The sum of 1/x^2 from 1 to 1000 is: 1.6439345666815612E+000
Whereas pi^2/6 is: 1.64493407
</pre>
 
=={{header|Perl}}==
<langsyntaxhighlight lang="perl">my $sum = 0;
$sum += 1 / $_ ** 2 foreach 1..1000;
print "$sum\n";</langsyntaxhighlight>
or
<langsyntaxhighlight lang="perl">use List::Util qw(reduce);
$sum = reduce { $a + 1 / $b ** 2 } 0, 1..1000;
print "$sum\n";</langsyntaxhighlight>
An other way of doing it is to define the series as a closure:
<langsyntaxhighlight lang="perl">my $S = do { my ($sum, $k); sub { $sum += 1/++$k**2 } };
my @S = map &$S, 1 .. 1000;
print $S[-1];</langsyntaxhighlight>
 
=={{header|Perl 6Phix}}==
<!--<syntaxhighlight lang="phix">(phixonline)-->
(Some of these work with [[rakudo]], and others with [[niecza]]. Eventually they'll all work everywhere...)
<span style="color: #008080;">function</span> <span style="color: #000000;">sumto</span><span style="color: #0000FF;">(</span><span style="color: #004080;">atom</span> <span style="color: #000000;">n</span><span style="color: #0000FF;">)</span>
<span style="color: #004080;">atom</span> <span style="color: #000000;">res</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">0</span>
<span style="color: #008080;">for</span> <span style="color: #000000;">i</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span> <span style="color: #008080;">to</span> <span style="color: #000000;">n</span> <span style="color: #008080;">do</span>
<span style="color: #000000;">res</span> <span style="color: #0000FF;">+=</span> <span style="color: #000000;">1</span><span style="color: #0000FF;">/(</span><span style="color: #000000;">i</span><span style="color: #0000FF;">*</span><span style="color: #000000;">i</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
<span style="color: #008080;">return</span> <span style="color: #000000;">res</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span>
<span style="color: #0000FF;">?</span><span style="color: #000000;">sumto</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1000</span><span style="color: #0000FF;">)</span>
<!--</syntaxhighlight>-->
{{out}}
<pre>
1.643934567
</pre>
 
In general, the <code>$n</code>th partial sum of a series whose terms are given by a unary function <code>&f</code> is
 
<lang perl6>[+] map &f, 1 .. $n</lang>
 
So what's needed in this case is
 
<lang perl6>say [+] map { 1 / $^n**2 }, 1 .. 1000;</lang>
 
Or, using the "hyper" metaoperator to vectorize, we can use a more "point free" style while keeping traditional precedence:
<lang perl6>say [+] 1 «/« (1..1000) »**» 2;</lang>
 
Or we can use the <tt>X</tt> "cross" metaoperator, which is convenient even if one side or the other is a scalar. In this case, we demonstrate a scalar on either side:
 
<lang perl6>say [+] 1 X/ (1..1000 X** 2);</lang>
Note that cross ops are parsed as list infix precedence rather than using the precedence of the base op as hypers do. Hence the difference in parenthesization.
 
In a lazy language like Perl 6, it's generally considered a stronger abstraction to write the correct infinite sequence, and then take the part of it you're interested in.
Here we define an infinite sequence of partial sums (by adding a backslash into the reduction to make it look "triangular"), then take the 1000th term of that:
<lang perl6>constant @x = [\+] 0, { 1 / ++(state $n) ** 2 } ... *;
say @x[1000]; # prints 1.64393456668156</lang>
Note that infinite constant sequences can be lazily generated in Perl 6, or this wouldn't work so well...
 
A cleaner style is to combine these approaches with a more FP look:
 
<lang perl6>constant ζish = [\+] map -> \𝑖 { 1 / 𝑖**2 }, 1..*;
say ζish[1000];</lang>
 
Perhaps the cleanest way is to just define the zeta function and evaluate it for s=2, possibly using memoization:
<lang perl6>sub ζ($s) is cached { [\+] 1..* X** -$s }
say ζ(2)[1000];</lang>
 
Notice how the thus-defined zeta function returns a lazy list of approximated values, which is arguably the closest we can get from the mathematical definition.
 
Finally, if list comprehensions are your hammer, you can nail it this way:
 
<lang perl6>say [+] (1 / $_**2 for 1..1000);</lang>
 
That's fine for a single result, but if you're going to be evaluating the sequence multiple times, you don't want to be recalculating the sum each time, so it's more efficient to define the sequence as a constant to let the run-time automatically cache those values already calculated.
 
=={{header|PicoLisp}}==
<lang PicoLisp>(scl 9) # Calculate with 9 digits precision
 
(let S 0
(for I 1000
(inc 'S (*/ 1.0 (* I I))) )
(prinl (round S 6)) ) # Round result to 6 digits</lang>
Output:
<pre>1.643935</pre>
=={{header|Pike}}==
<lang Pike>array(int) x = enumerate(1000,1,1);
`+(@(1.0/pow(x[*],2)[*]));
Result: 1.64393</lang>
=={{header|PHP}}==
<langsyntaxhighlight PHPlang="php"><?php
 
/**
Line 1,352 ⟶ 2,392:
 
echo sum_of_a_series(1000,1);
</syntaxhighlight>
</lang>
{{out}}
<pre>1.6439345666816</pre>
 
=={{header|Picat}}==
===List comprehension===
<syntaxhighlight lang="picat">s(N) = sum([1.0/K**2 : K in 1..N]).</syntaxhighlight>
 
===Iterative===
<syntaxhighlight lang="picat">s2(N) = Sum =>
K = 1,
Sum1 = 0,
while(K <= N)
Sum1 := Sum1 + 1/K**2,
K := K + 1
end,
Sum = Sum1.</syntaxhighlight>
 
===Test===
<syntaxhighlight lang="picat">go =>
% List comprehension
test(s,1000),
nl,
% Iterative
test(s2,1000),
nl.
 
test(Fun,N) =>
println([fun=Fun,n=N]),
Pi2_6 = math.pi**2/6,
println(Pi2_6='math.pi**2/6'),
nl,
foreach(I in 1..6)
S = apply(Fun,10**I),
printf("%f (diff: %w)\n", S,Pi2_6-S)
end,
nl.</syntaxhighlight>
 
{{out}}
<pre>[fun = s,n = 1000]
1.644934066848226 = math.pi**2/6
 
1.549768 (diff: 0.095166335681686)
1.634984 (diff: 0.009950166663334)
1.643935 (diff: 0.000999500166665)
1.644834 (diff: 0.000099995000161)
1.644924 (diff: 0.000009999949984)
1.644933 (diff: 0.000000999999456)
 
[fun = s2,n = 1000]
1.644934066848226 = math.pi**2/6
 
1.549768 (diff: 0.095166335681686)
1.634984 (diff: 0.009950166663334)
1.643935 (diff: 0.000999500166665)
1.644834 (diff: 0.000099995000161)
1.644924 (diff: 0.000009999949984)
1.644933 (diff: 0.000000999999456)</pre>
 
=={{header|PicoLisp}}==
<syntaxhighlight lang="picolisp">(scl 9) # Calculate with 9 digits precision
 
(let S 0
(for I 1000
(inc 'S (*/ 1.0 (* I I))) )
(prinl (round S 6)) ) # Round result to 6 digits</syntaxhighlight>
Output:
<pre>1.643935</pre>
 
=={{header|Pike}}==
<syntaxhighlight lang="pike">array(int) x = enumerate(1000,1,1);
`+(@(1.0/pow(x[*],2)[*]));
Result: 1.64393</syntaxhighlight>
 
=={{header|PL/I}}==
<langsyntaxhighlight lang="pli">/* sum the first 1000 terms of the series 1/n**2. */
s = 0;
 
Line 1,364 ⟶ 2,474:
end;
 
put skip list (s);</langsyntaxhighlight>
 
{{out}}
Line 1,373 ⟶ 2,483:
=={{header|Pop11}}==
 
<langsyntaxhighlight lang="pop11">lvars s = 0, j;
for j from 1 to 1000 do
s + 1.0/(j*j) -> s;
endfor;
 
s =></langsyntaxhighlight>
 
=={{header|PostScript}}==
<syntaxhighlight lang="text">
/aproxriemann{
/x exch def
Line 1,394 ⟶ 2,504:
 
1000 aproxriemann
</syntaxhighlight>
</lang>
Output:
<syntaxhighlight lang="text">
1.64393485
</syntaxhighlight>
</lang>
 
{{libheader|initlib}}
<langsyntaxhighlight lang="postscript">
% using map
[1 1000] 1 range {dup * 1 exch div} map 0 {+} fold
Line 1,407 ⟶ 2,517:
% just using fold
[1 1000] 1 range 0 {dup * 1 exch div +} fold
</syntaxhighlight>
</lang>
 
=={{header|Potion}}==
<syntaxhighlight lang="potion">sum = 0.0
1 to 1000 (i): sum = sum + 1.0 / (i * i).
sum print</syntaxhighlight>
 
=={{header|PowerShell}}==
<langsyntaxhighlight lang="powershell">$x = 1..1000 `
| ForEach-Object { 1 / ($_ * $_) } `
| Measure-Object -Sum
Write-Host Sum = $x.Sum</langsyntaxhighlight>
 
=={{header|Prolog}}==
Works with SWI-Prolog.
<langsyntaxhighlight Prologlang="prolog">sum(S) :-
findall(L, (between(1,1000,N),L is 1/N^2), Ls),
sumlist(Ls, S).
</syntaxhighlight>
</lang>
Ouptput :
<pre>?- sum(S).
Line 1,427 ⟶ 2,542:
 
=={{header|PureBasic}}==
<langsyntaxhighlight PureBasiclang="purebasic">Define i, sum.d
 
For i=1 To 1000
Line 1,433 ⟶ 2,548:
Next i
 
Debug sum</langsyntaxhighlight>
<tt>
Answer = 1.6439345666815615
Line 1,439 ⟶ 2,554:
 
=={{header|Python}}==
<langsyntaxhighlight lang="python">print ( sum(1.0 / (x * x) for x in range(1, 1001)) )</langsyntaxhighlight>
Or, as a generalised map, or fold / reduction – (see [[Catamorphism#Python]]):
<syntaxhighlight lang="python">'''The sum of a series'''
 
from functools import reduce
 
 
# seriesSumA :: (a -> b) -> [a] -> b
def seriesSumA(f):
'''The sum of the map of f over xs.'''
return lambda xs: sum(map(f, xs))
 
 
# seriesSumB :: (a -> b) -> [a] -> b
def seriesSumB(f):
'''Folding acc + f(x) over xs where acc begins at 0.'''
return lambda xs: reduce(
lambda a, x: a + f(x), xs, 0
)
 
 
# TEST ----------------------------------------------------
# main:: IO ()
def main():
'''Summing 1/x^2 over x = 1..1000'''
 
def f(x):
return 1 / (x * x)
 
print(
fTable(
__doc__ + ':\n' + '(1/x^2 over x = 1..1000)'
)(lambda f: '\tby ' + f.__name__)(str)(
lambda g: g(f)(enumFromTo(1)(1000))
)([seriesSumA, seriesSumB])
)
 
 
# GENERIC -------------------------------------------------
 
# compose (<<<) :: (b -> c) -> (a -> b) -> a -> c
def compose(g):
'''Right to left function composition.'''
return lambda f: lambda x: g(f(x))
 
 
# enumFromTo :: (Int, Int) -> [Int]
def enumFromTo(m):
'''Integer enumeration from m to n.'''
return lambda n: list(range(m, 1 + n))
 
 
# fTable :: String -> (a -> String) ->
# (b -> String) ->
# (a -> b) -> [a] -> String
def fTable(s):
'''Heading -> x display function -> fx display function ->
f -> value list -> tabular string.'''
def go(xShow, fxShow, f, xs):
w = max(map(compose(len)(xShow), xs))
return s + '\n' + '\n'.join([
xShow(x).rjust(w, ' ') + (
' -> '
) + fxShow(f(x)) for x in xs
])
return lambda xShow: lambda fxShow: (
lambda f: lambda xs: go(
xShow, fxShow, f, xs
)
)
 
 
# MAIN ---
if __name__ == '__main__':
main()</syntaxhighlight>
{{Out}}
<pre>The sum of a series:
(1/x^2 over x = 1..1000)
by seriesSumA -> 1.6439345666815615
by seriesSumB -> 1.6439345666815615</pre>
 
=={{header|Q}}==
<syntaxhighlight lang="q">sn:{sum xexp[;-2] 1+til x}
sn 1000</syntaxhighlight>
 
{{Out}}
<pre>1.643935</pre>
 
=={{header|Quackery}}==
 
Using the Quackery bignum rational arithmetic suite <code>bigrat.qky</code>.
 
<syntaxhighlight lang="quackery"> [ $ "bigrat.qky" loadfile ] now!
 
[ 0 n->v rot times
[ i^ 1+ 2 ** n->v 1/v v+ ] ] is sots ( n --> n/d )
1000 sots
2dup
proper 1000000 round improper
say "Sum of the series to n=1000."
cr cr
say "As a proper fraction, best approximation where the denominator does not exceed 1 million."
cr cr
proper$ echo$ say " (Correct to ten places after the decimal point.)"
cr cr
say "As a decimal fraction, first 1000 places after the decimal point."
cr cr
1000 point$ echo$</syntaxhighlight>
 
{{out}}
 
<pre>Sum of the series to n=1000.
 
As a proper fraction, best approximation where the denominator does not exceed 1 million.
 
1 120258/186755 (Correct to ten places after the decimal point.)
 
As a decimal fraction, first 1000 places after the decimal point.
 
1.6439345666815598031390580238222155896521034464936853167172372054281147052136371544864376381235947140840247689830052307986940209330560586814364561437341082161835849587934021025978122814760355990612544129425222414004531893441493046096060608253065583656711834617047405403932309749347134167799683552617330444813936406879861764067575322580319473862296485681925322084905899406792924876019403018468725753572490400061711335030331913299036845451416705045304303525919036749150124063804931627056349457943068021121600349225249063311667960633996823281725263770542297902063202752003109461373037518723003263479387388393217302120377472207068721127250339809048861023369090772476245864265860225860011245643262424159227627089164279360808513966752516418684047190163638741163457263381145491031118582607024223083056005537196735365330300185181967964028738217100545990163108755787441026888189509196651819302024386462242896954169347538400396493562377033255763634275476803474905179930119321187665211349199562778792639603861646</pre>
 
=={{header|R}}==
<langsyntaxhighlight lang="r">print( sum( 1/seq(1000)^2 ) )</langsyntaxhighlight>
 
=={{header|Racket}}==
Line 1,448 ⟶ 2,685:
A solution using Typed Racket:
 
<langsyntaxhighlight lang="racket">
#lang typed/racket
 
Line 1,455 ⟶ 2,692:
(for/sum: : Real ([k : Natural (in-range 1 (+ n 1))])
(/ 1.0 (* k k))))
</syntaxhighlight>
</lang>
 
=={{header|Raku}}==
(formerly Perl 6)
{{Works with|rakudo|2016.04}}
 
In general, the <code>$n</code>th partial sum of a series whose terms are given by a unary function <code>&f</code> is
 
<syntaxhighlight lang="raku" line>[+] map &f, 1 .. $n</syntaxhighlight>
 
So what's needed in this case is
 
<syntaxhighlight lang="raku" line>say [+] map { 1 / $^n**2 }, 1 .. 1000;</syntaxhighlight>
 
Or, using the "hyper" metaoperator to vectorize, we can use a more "point free" style while keeping traditional precedence:
<syntaxhighlight lang="raku" line>say [+] 1 «/« (1..1000) »**» 2;</syntaxhighlight>
 
Or we can use the <tt>X</tt> "cross" metaoperator, which is convenient even if one side or the other is a scalar. In this case, we demonstrate a scalar on either side:
 
<syntaxhighlight lang="raku" line>say [+] 1 X/ (1..1000 X** 2);</syntaxhighlight>
Note that cross ops are parsed as list infix precedence rather than using the precedence of the base op as hypers do. Hence the difference in parenthesization.
 
With list comprehensions, you can write:
 
<syntaxhighlight lang="raku" line>say [+] (1 / $_**2 for 1..1000);</syntaxhighlight>
 
That's fine for a single result, but if you're going to be evaluating the sequence multiple times, you don't want to be recalculating the sum each time, so it's more efficient to define the sequence as a constant to let the run-time automatically cache those values already calculated. In a lazy language like Raku, it's generally considered a stronger abstraction to write the correct infinite sequence, and then take the part of it you're interested in.
Here we define an infinite sequence of partial sums (by adding a backslash into the reduction to make it look "triangular"), then take the 1000th term of that:
<syntaxhighlight lang="raku" line>constant @x = [\+] 0, { 1 / ++(state $n) ** 2 } ... *;
say @x[1000]; # prints 1.64393456668156</syntaxhighlight>
Note that infinite constant sequences can be lazily generated in Raku, or this wouldn't work so well...
 
A cleaner style is to combine these approaches with a more FP look:
 
<syntaxhighlight lang="raku" line>constant ζish = [\+] map -> \𝑖 { 1 / 𝑖**2 }, 1..*;
say ζish[1000];</syntaxhighlight>
 
Perhaps the cleanest way is to just define the zeta function and evaluate it for s=2, possibly using memoization:
<syntaxhighlight lang="raku" line>use experimental :cached;
sub ζ($s) is cached { [\+] 1..* X** -$s }
say ζ(2)[1000];</syntaxhighlight>
 
Notice how the thus-defined zeta function returns a lazy list of approximated values, which is arguably the closest we can get from the mathematical definition.
 
=={{header|Raven}}==
<langsyntaxhighlight Ravenlang="raven">0 1 1000 1 range each 1.0 swap dup * / +
"%g\n" print</langsyntaxhighlight>
{{out}}
<pre>1.64393</pre>
Raven uses a 32 bit float, so precision limits the accuracy of the result for large iterations.
 
=={{header|Red}}==
<syntaxhighlight lang="red">Red []
s: 0
repeat n 1000 [ s: 1.0 / n ** 2 + s ]
print s
</syntaxhighlight>
 
=={{header|REXX}}==
===Sumssums specific terms===
<langsyntaxhighlight lang="rexx">/*REXX program sums the first N terms of 1/(ik**2), i k=1 ──► N. */
parse arg N D . /*maybeobtain getoptional numarguments offrom terms,the digits.CL*/
if N=='' | N=='",'" then N=1000 /*Not specified? UseThen use the default.*/
if D=='' | D=="," then D= 60 then D=60 /* " " " " " " */
numeric digits D /*use D digits: (9 is defaultthe forREXX default).*/
$=0 /*REXX,initialize 60the issum thisto pgm's defaultzero. */
w do k=1 for length(N) /*use max[↓] widthcompute for nice output N terms. */
sum = 0 $=$ + 1/k**2 /*initializeadd thea sumsquared reciprocal to zero. the sum. */
do j=1 for N end /*compute for N terms. k*/
sum = sum + 1 / j**2 /*add another term to the sum. */
end /*j*/
 
say 'The sum of' right( N,w) "terms is:" sum $ /*stick a fork in it, we're all done. */</syntaxhighlight>
'''output''' &nbsp; when using the default input:
/*stick a fork in it, we're done.*/</lang>
 
'''Output''' when using the default input:
<pre>
The sum of 1000 terms is: 1.64393456668155980313905802382221558965210344649368531671713
</pre>
 
===Sumssums with running total===
This REXX version shows the &nbsp; ''running total'' &nbsp; for every 10<sup>th</sup> term.
<lang rexx>/*REXX program sums the first N terms of 1/(i**2), i=1 ──► N.*/
parse<syntaxhighlight arglang="rexx">/*REXX Nprogram Dsums .the first N terms o f 1/(k**2), /*maybe getk=1 num──► of terms, digitsN. */
ifparse arg N=='' |D . N==',' then N=1000 /*Notobtain specified?optional arguments Usefrom the defaultCL*/
if DN=='' | N=="," then DN=601000 /* " " /*Not specified? Then use the " " " default.*/
numericif digitsD=='' | D=="," then D= 60 /*use D" " " " " digits: 9" is default for */
numeric digits D /*use D digits /*REXX, 60(9 is thisthe pgm'sREXX default).*/
w = length(N) /*useW max widthis used for nicealigning the output. */
sum$=0 /*initialize the sum to zero. */
do jk=1 for N /* [↓] compute for N terms. */
sum $= sum $ + 1 / jk**2 /*add anothera termsquared reciprocal to the sum. */
ifparse var k left(j,1)\==s 2 m '' -1 e then iterate /*does J start with a one ? /*obtain the start and end decimal digs*/
if right(j,1)e\==0 then iterate /* " " end " " zero ? /*does K end with the dec digit 0 ? */
if substr(j,2)s\= 0=1 then iterate /* " " start " " " " all zeroes1 ? */
sayif m\=0 then iterate 'The sum of' right(j,w) "terms is:" sum /*display it. " " middle contain any non-zero ?*/
if k==N then iterate /* " " equal N, then skip running sum*/
end /*j*/
say 'The sum of' right(k,w) "terms is:" $ /*stickdisplay a forkrunning in it, we're donesum.*/</lang>
end /*k*/
 
say /*a blank line for sep. */
'''Output''' when using the input of <tt> 1000000000 </tt>:
say 'The sum of' right(k-1,w) "terms is:" $ /*display the final sum.*/
/*stick a fork in it, we're all done. */</syntaxhighlight>
'''output''' &nbsp; when using the input of: &nbsp; <tt> 1000000000 </tt>
<pre>
The sum of 10 terms is: 1.54976773116654069035021415973796926177878558830939783320736
Line 1,516 ⟶ 2,801:
The sum of 1000000000 terms is: 1.64493406584822643697241516647935852255228323457346510444171
</pre>
'''Outputoutput''' &nbsp; from a calculator (π²computing &nbsp; <big><big><math>\pi</math></big><sup>2</sup>/6</big>, &nbsp; (using 60 digits) &nbsp; showing the correct number (nine) of decimal digits &nbsp; [superscriptthe superscripting of the digits was addededited after-the-fact]:
<big>
 
1.64493406<sup>684822643647241516664602518921894990120679843773556</sup>
</big>
 
===Sumssums with running significance===
This is a technique to show a &nbsp; ''running significance'' &nbsp; (based on the previous calculation).
 
If the &nbsp; '''old''' &nbsp; REXX variable would be set to &nbsp; '''1.64''' &nbsp; (instead of &nbsp; '''1'''), the first noise digits could be bypassed to make the display ''cleaner''.
<langsyntaxhighlight lang="rexx">/*REXX program sums the first N terms of 1/(ik**2), i k=1 ──► N. */
parse arg N D . /*optionalobtain numoptional ofarguments terms,from the digits.CL*/
if N=='' | N=='",'" then N=1000 /*Not specified? UseThen use the default.*/
if D=='' | D=="," then D= 60 then D=60 /* " " " " " " */
numeric digits D /*use D digits (9 is the REXX default).*/
@sig = 'The significant sum of' /*literal used in SAY statement.*/
numericw=length(N) digits D /*useW D digits: 9 is defaultused for aligning the output. */
$=0 /*REXX,initialize 60the issum thisto pgm's defaultzero. */
w old=1 length(N) /*usethe maxnew sum widthto forcompared niceto outputthe old. */
sum p= 0 /*initialize the SUM to zero. /*significant decimal precision so far.*/
old = do k=1 for N /*the SUM[↓] to comparedcompute tofor the NEW N terms. */
p = 0 $=$ + 1/k**2 /*significantadd precisiona sosquared far.reciprocal to the sum. */
do jc=1compare($,old) for N /*compute for n /*see how terms. we're doing with precision. */
if sumc>p = sumthen do + 1 / j**2 /*add another term to the sum. /*Got another significant decimal dig? */
c = compare(sum,old) say 'The significant /*seesum how weof're doing withright(k,w) prec. */ "terms is:" left($,c)
if c> p=c then do /*Gotuse anotherthe new significant digit?precision. */
end say @sig right(j,w) "terms is:" left( /* [↑] display significant part of sum,c)*/
old=$ p = c /*theuse new"old" significantsum precisionfor the next compare. */
end end/*k*/
say old = sum /*usedisplay "old"blank sumline for nextthe compareseparator.*/
say 'The sum of' right(N,w) "terms is:" /*display the sum's preamble line. */
end /*j*/
say $ /*stick a fork in it, we're all done. */</syntaxhighlight>
say
'''output''' &nbsp; when using the input of &nbsp; (one billion [limit], and one hundred decimal digits): &nbsp; <tt> &nbsp; 1000000000 &nbsp; 100 </tt>
say 'The sum of' right(N,w) "terms is:" /*display sum's preamble.*/
say sum /*display the sum on its own line*/
/*stick a fork in it, we're done.*/</lang>
'''Output''' when using the input of <tt>35000000 100</tt>:
<pre>
The significant sum of 2 3 terms is: 1.3
The significant sum of 3 5 terms is: 1.346
The significant sum of 5 14 terms is: 1.46575
The significant sum of 14 34 terms is: 1.5756159
The significant sum of 34 110 terms is: 1.615963588
The significant sum of 110 328 terms is: 1.63588641889
The significant sum of 328 1024 terms is: 1.6418896439579
The significant sum of 1024 3207 terms is: 1.643957964462229
The significant sum of 3207 10043 terms is: 1.64462229644834499
The significant sum of 10043 31782 terms is: 1.6448344996449026029
The significant sum of 31782 100314 terms is: 1.644902602964492409819
The significant sum of 100314 316728 terms is: 1.64492409819644930909569
The significant sum of 316728 1000853 terms is: 1.6449309095696449330677009
The significant sum of 1000853 3163463 terms is: 1.644933067700964493375073899
The significant sum of 3163463 10001199 terms is: 1.64493375073899644933966860219
The significant sum of 10001199 31627592 terms is: 1.6449339668602196449340352302649
The significant sum of 31627592 100009299 terms is: 1.644934035230264964493405684915629
The significant sum of 316233759 terms is: 1.644934063686008709
 
The sum of 350000001000000000 terms is:
1.644934065848226436972415166479358522552283234573465104402224896012864613260343731009819376810240620
 
1.644934038276798273207105156927852205740478629316117966926591883437164764834567731984252290795163298
</pre>
One can see a pattern in the number of significant digits computed based on the ''number of terms used''. &nbsp; (See a discussion in the &nbsp; ''talk'' &nbsp; section.)
 
=={{header|Ring}}==
<syntaxhighlight lang="ring">
sum = 0
for i =1 to 1000
sum = sum + 1 /(pow(i,2))
next
decimals(8)
see sum
</syntaxhighlight>
 
=={{header|RLaB}}==
<syntaxhighlight lang="rlab">
<lang RLaB>
>> sum( (1 ./ [1:1000]) .^ 2 ) - const.pi^2/6
-0.000999500167
</syntaxhighlight>
</lang>
 
=={{header|RPL}}==
≪ 0 1 ROT '''FOR''' k SQ INV + '''NEXT''' ≫ '<span style="color:blue">∑INV2</span>'''' STO
 
1000 <span style="color:blue">∑INV2</span>
The emulator immediately returns
1: 1.64393456668
A basic HP-28S calculator returns after 27.5 seconds
1: 1.64393456674
{{works with|HP|49}}
'k' 1 1000 '1/SQ(k)' ∑
returns in 2 minutes 27 seconds, with exact mode set:
1: 83545938483149689478187854264854884386044454314086472930763839512603803291207881839588904977469387999844962675327115010933903589145654299730231109091124308462732153297321867661093162618281746011828755017021645889046777854795025297006943669294330752479399654716368801794529682603741344724733173765262964463970763934463926259796895140901128384286333311745462863716753134735154188954742414035836608258393970996630553795415075904205673610359458498106833291961256452756993199997231825920203667952667546787052535763624910912251107083702817265087341966845358732584971361645348091123849687614886682117125784781422103460192439394780707024963279033532646857677925648889105430050030795563141941157379481719403833258405980463950499887302926152552848089894630843538497552630691676216896740675701385847032173192623833881016332493844186817408141003602396236858699094240207812766449 / 50820720104325812617835292273000760481839790754374852703215456050992581046448162621598030244504097240825920773913981926305208272518886258627010933716354037062979680120674828102224650586465553482032614190502746121717248161892239954030493982549422690846180552358769564169076876408783086920322038142618269982747137757706040198826719424371333781947889528085329853597116893889786983109597085041878513917342099206896166585859839289193299599163669641323895022932959750057616390808553697984192067774252834860398458100840611325353202165675189472559524948330224159123505567527375848194800452556940453530457590024173749704941834382709198515664897344438584947842793131829050180589581507273988682409028088248800576590497216884808783192565859896957125449502802395453976401743504938336291933628859306247684023233969172475385327442707968328512729836445886537101453118476390400000000
 
=={{header|Ruby}}==
<langsyntaxhighlight lang="ruby">puts (1..1000).injectsum{ |sum, x| sum + 1.01r / x ** 2 }.to_f</syntaxhighlight>
{{out}}
#=> 1.64393456668156</lang>
<pre>
1.64393456668156
</pre>
 
=={{header|Run BASIC}}==
<langsyntaxhighlight lang="runbasic">
for i =1 to 1000
sum = sum + 1 /( i^2)
next i
print sum</langsyntaxhighlight>
 
=={{header|Rust}}==
<syntaxhighlight lang="rust">const LOWER: i32 = 1;
<lang rust>fn main() {
const UPPER: i32 = 1000;
let sum: f64 = (1u64..1000+1).fold(0.,|sum, num| sum + 1./(num*num) as f64);
 
println!("{}", sum);
// Because the rule for our series is simply adding one, the number of terms are the number of
}</lang>
// digits between LOWER and UPPER
const NUMBER_OF_TERMS: i32 = (UPPER + 1) - LOWER;
fn main() {
// Formulaic method
println!("{}", (NUMBER_OF_TERMS * (LOWER + UPPER)) / 2);
// Naive method
println!("{}", (LOWER..UPPER + 1).fold(0, |sum, x| sum + x));
}
</syntaxhighlight>
 
=={{header|SAS}}==
<langsyntaxhighlight lang="sas">data _null_;
s=0;
do n=1 to 1000;
Line 1,605 ⟶ 2,924:
e=s-constant('pi')**2/6;
put s e;
run;</langsyntaxhighlight>
 
=={{header|Scala}}==
<langsyntaxhighlight lang="scala">scala> 1 to 1000 map (x => 1.0 / (x * x)) sum
res30: Double = 1.6439345666815615</langsyntaxhighlight>
 
=={{header|Scheme}}==
<langsyntaxhighlight lang="scheme">(define (sum a b fn)
(do ((i a (+ i 1))
(result 0 (+ result (fn i))))
Line 1,618 ⟶ 2,937:
 
(sum 1 1000 (lambda (x) (/ 1 (* x x)))) ; fraction
(exact->inexact (sum 1 1000 (lambda (x) (/ 1 (* x x))))) ; decimal</langsyntaxhighlight>
 
More idiomatic way (or so they say) by tail recursion:
<langsyntaxhighlight lang="scheme">(define (invsq f to)
(let loop ((f f) (s 0))
(if (> f to)
Line 1,629 ⟶ 2,948:
;; whether you get a rational or a float depends on implementation
(invsq 1 1000) ; 835459384831...766449/50820...90400000000
(exact->inexact (invsq 1 1000)) ; 1.64393456668156</langsyntaxhighlight>
 
=={{header|Seed7}}==
<langsyntaxhighlight lang="seed7">$ include "seed7_05.s7i";
include "float.s7i";
 
Line 1,647 ⟶ 2,966:
end for;
writeln(sum digits 6 lpad 8);
end func;</langsyntaxhighlight>
 
=={{header|SETL}}==
<syntaxhighlight lang="setl">print( +/[1/k**2 : k in [1..1000]] );</syntaxhighlight>
{{out}}
<pre>1.64393456668156</pre>
 
=={{header|Sidef}}==
<langsyntaxhighlight lang="ruby">say sum(1..1000 map, {|in| 1 / in**2 }«+»);</langsyntaxhighlight>
 
Alternatively, using the ''reduce{}'' method:
<syntaxhighlight lang="ruby">say (1..1000 -> reduce { |a,b| a + (1 / b**2) })</syntaxhighlight>
 
{{out}}
<pre>
1.64393456668155980313905802382221558965210344649369
</pre>
 
=={{header|Slate}}==
Line 1,656 ⟶ 2,988:
Manually coerce it to a float, otherwise you will get an exact (and slow) answer:
 
<langsyntaxhighlight lang="slate">((1 to: 1000) reduce: [|:x :y | x + (y squared reciprocal as: Float)]).</langsyntaxhighlight>
 
=={{header|Smalltalk}}==
<langsyntaxhighlight lang="smalltalk">( (1 to: 1000) fold: [:sum :aNumber |
sum + (aNumber squared reciprocal) ] ) asFloat displayNl.</langsyntaxhighlight>
 
=={{header|SparForte}}==
As a structured script.
<syntaxhighlight lang="ada">#!/usr/local/bin/spar
pragma annotate( summary, "sumseries" )
@( description, "Compute the nth term of a series, i.e. the " )
@( description, "sum of the n first terms of the " )
@( description, "corresponding sequence. For this task " )
@( description, "repeat 1000 times. " )
@( see_also, "http://rosettacode.org/wiki/Sum_of_a_series" )
@( author, "Ken O. Burtch" );
pragma license( unrestricted );
 
pragma restriction( no_external_commands );
 
procedure sumseries is
 
function inverse_square( x : long_float ) return long_float is
begin
return 1/x**2;
end inverse_square;
 
total : long_float := 0.0;
max_param : constant natural := 1000;
 
begin
for i in 1..max_param loop
total := @ + inverse_square( i );
end loop;
 
put( "Sum of F(x) from 1 to" )
@( max_param )
@( " is" )
@( total );
new_line;
end sumseries;</syntaxhighlight>
 
=={{header|SQL}}==
<langsyntaxhighlight SQLlang="sql">create table t1 (n real);
-- this is postgresql specific, fill the table
insert into t1 (select generate_series(1,1000)::real);
Line 1,669 ⟶ 3,037:
select 1/(n*n) as recip from t1
) select sum(recip) from tt;
</syntaxhighlight>
</lang>
Result of select (with locale DE):
<pre>
Line 1,677 ⟶ 3,045:
(1 Zeile)
</pre>
 
=={{header|Stata}}==
<syntaxhighlight lang="stata">function series(n) {
return(sum((n..1):^-2))
}
 
series(1000)-pi()^2/6
-.0009995002</syntaxhighlight>
 
=={{header|Swift}}==
<syntaxhighlight lang="swift">
<lang Swift>
func sumSeries(var n: Int) -> Double {
var ret: Double = 0
Line 1,691 ⟶ 3,067:
 
output: 1.64393456668156
</syntaxhighlight>
</lang>
 
<syntaxhighlight lang="text">
Swift also allows extension to datatypes. Here's similar code using an extension to Int.
 
Line 1,716 ⟶ 3,092:
 
y = 1000.sumSeries()
</syntaxhighlight>
</lang>
 
=={{header|Tcl}}==
 
=== Using Expansion Operator and mathop ===
{{works with|Tcl|8.5}}
<syntaxhighlight lang="tcl">package require Tcl 8.5
namespace path {::tcl::mathop ::tcl::} ;# Ease of access to mathop commands
proc lsum_series {l} {+ {*}[lmap n $l {/ [** $n 2]}]} ;# an expr would be clearer, but this is a demonstration of mathop
 
# using range function defined below
lsum_series [range 1 1001] ;# ==> 1.6439345666815615</syntaxhighlight>
 
=== Using Loop ===
{{works with|Tcl|8.5}}
<langsyntaxhighlight lang="tcl">package require Tcl 8.5
 
proc partial_sum {func - start - stop} {
Line 1,731 ⟶ 3,118:
set S {x {expr {1.0 / $x**2}}}
 
partial_sum $S from 1 to 1000 ;# => 1.6439345666815615</langsyntaxhighlight>
 
=== Using tcllib ===
{{tcllib|struct::list}}
<langsyntaxhighlight lang="tcl">package require Tcl 8.5
package require struct::list
 
Line 1,741 ⟶ 3,129:
}
 
set S {x {expr {1.0 / $x**2}}}
sum_of $S [range 1 1001] ;# ==> 1.6439345666815615</lang>
 
sum_of $S [range 1 1001] ;# ==> 1.6439345666815615</syntaxhighlight>
 
The helper <code>range</code> procedure is:
<langsyntaxhighlight lang="tcl"># a range command akin to Python's
proc range args {
foreach {start stop step} [switch -exact -- [llength $args] {
Line 1,759 ⟶ 3,149:
}
return $range
}</langsyntaxhighlight>
 
=={{header|TI-83 BASIC}}==
=== TI-84 Version ===
{{trans|TI-89 BASIC}}
{{works with|TI-83 BASIC|TI-84Plus 2.55MP}}
<syntaxhighlight lang="ti83b">
∑(1/X²,X,1,1000)
</syntaxhighlight>
{{out}}
<pre>
1.643934567
</pre>
 
===TI-83 Version===
 
The TI-83 does not have the new summation notation, and caps lists at 999 entries.
<syntaxhighlight lang="ti83b">sum(seq(1/X²,X,1,999))</syntaxhighlight>
{{out}}
<pre>
1.643933567
</pre>
 
=={{header|TI-89 BASIC}}==
 
<langsyntaxhighlight lang="ti89b">∑(1/x^2,x,1,1000)</langsyntaxhighlight>
 
=={{header|TXR}}==
Line 1,771 ⟶ 3,182:
Variant A1: limit the list generation inside the <code>gen</code> operator.
 
<langsyntaxhighlight lang="txr">txr -p '[reduce-left + (let ((i 0)) (gen (< i 1000) (/ 1.0 (* (inc i) i)))) 0]'
1.64393456668156</langsyntaxhighlight>
 
Variant A2: generate infinite list, but take only the first 1000 items using <code>[list-expr 0..999]</code>.
 
<langsyntaxhighlight lang="txr">txr -p '[reduce-left + [(let ((i 0)) (gen t (/ 1.0 (* (inc i) i)))) 0..999] 0]'
1.64393456668156</langsyntaxhighlight>
 
Variant B: generate lazy integer range, and pump it through a series of function with the help of the <code>chain</code> functional combinator and the <code>op</code> partial evaluation/binding operator.
 
<langsyntaxhighlight lang="txr">txr -p '[[chain range (op mapcar (op / 1.0 (* @1 @1))) (op reduce-left + @1 0)] 1 1000]'
1.64393456668156</langsyntaxhighlight>
 
Variant C: unravel the chain in Variant B using straightforward nesting.
 
<langsyntaxhighlight lang="txr">txr -p '[reduce-left + (mapcar (op / 1.0 (* @1 @1)) (range 1 1000)) 0]'
1.64393456668156</langsyntaxhighlight>
 
Variant D: bring Variant B's inverse square calculation into the fold, eliminating mapcar. Final answer.
 
<langsyntaxhighlight lang="txr">txr -p '[reduce-left (op + @1 (/ 1.0 (* @2 @2))) (range 1 1000) 0]'
1.64393456668156</langsyntaxhighlight>
 
=={{header|Unicon}}==
See [[#Icon|Icon]].
 
=={{header|UnixPipes}}==
<langsyntaxhighlight lang="bash">term() {
b=$1;res=$2
echo "scale=5;1/($res*$res)+$b" | bc
Line 1,812 ⟶ 3,226:
}
 
(echo 3; echo 1; echo 4) | fold sum</langsyntaxhighlight>
 
=={{header|Unicon}}==
See [[#Icon|Icon]].
 
=={{header|Ursala}}==
Line 1,823 ⟶ 3,234:
function, plus. The rest the expression constructs the series
by inverting the square of each number in the list from 1 to 1000.
<langsyntaxhighlight Ursalalang="ursala">#import flo
#import nat
 
#cast %e
 
total = plus:-0 div/*1. sqr* float*t iota 1001</langsyntaxhighlight>
output:
<pre>1.643935e+00</pre>
 
=={{header|Vala}}==
<langsyntaxhighlight lang="vala">
public static void main(){
int i, start = 1, end = 1000;
Line 1,843 ⟶ 3,254:
stdout.printf("%s\n", sum.to_string());
}
</syntaxhighlight>
</lang>
 
Output:
Line 1,849 ⟶ 3,260:
1.6439345666815615
</pre>
 
=={{header|VBA}}==
<syntaxhighlight lang="vb">Private Function sumto(n As Integer) As Double
Dim res As Double
For i = 1 To n
res = res + 1 / i ^ 2
Next i
sumto = res
End Function
Public Sub main()
Debug.Print sumto(1000)
End Sub</syntaxhighlight>{{out}}
<pre> 1,64393456668156 </pre>
 
=={{header|VBScript}}==
<syntaxhighlight lang="vb">' Sum of a series
for i=1 to 1000
s=s+1/i^2
next
wscript.echo s </syntaxhighlight>
{{out}}
<pre>
1.64393456668156
</pre>
 
=={{header|Visual Basic .NET}}==
{{trans|VBScript}}
{{works with|Visual Basic .NET|2013}}
<syntaxhighlight lang="vbnet">' Sum of a series
Sub SumOfaSeries()
Dim s As Double
s = 0
For i = 1 To 1000
s = s + 1 / i ^ 2
Next 'i
Console.WriteLine(s)
End Sub </syntaxhighlight>
{{out}}
<pre>
1.64393456668156
</pre>
 
=={{header|Verilog}}==
<syntaxhighlight lang="Verilog">module main;
integer i;
real sum;
initial begin
sum = 0.0;
for(i = 1; i <= 1000; i=i+1) sum = sum + 1.0 / (i * i);
$display(sum);
end
endmodule</syntaxhighlight>
<pre>1.64393</pre>
 
=={{header|V (Vlang)}}==
{{trans|go}}
<syntaxhighlight lang="v (vlang)">import math
 
fn main(){
println('known: ${math.pi*math.pi/6}')
mut sum := f64(0)
for i :=1e3; i >0; i-- {
sum += 1/(i*i)
}
println('computed: $sum')
}</syntaxhighlight>
Output:
<pre>known: 1.6449340668482264
computed: 1.6439345666815597</pre>
 
=={{header|WDTE}}==
<syntaxhighlight lang="wdte">let s => import 'stream';
 
s.range 1 1001
-> s.map (@ inner k => / 1 (* k k))
-> s.reduce 0 +
-- io.writeln io.stdout
;</syntaxhighlight>
 
{{out}}
<pre>1.643933567</pre>
 
=={{header|Wortel}}==
<langsyntaxhighlight lang="wortel">@sum !*#~V1Sn @to 1000 ; returns 1.6439345666815615</langsyntaxhighlight>
<langsyntaxhighlight lang="wortel">@to 1000 ; generates a list of 1 to 1000 (inclusive)
#~V1Sn ; number expression which stands for: square push(1) swap divide
!* ; maps the number expression over the list
@sum ; sums the list</langsyntaxhighlight>
 
=={{header|Wren}}==
<syntaxhighlight lang="wren">var sumSeries = Fn.new { |n| (1..n).reduce(0) { |sum, i| sum + 1/(i*i) } }
 
System.print("s(1000) = %(sumSeries.call(1000))")
System.print("zeta(2) = %(Num.pi*Num.pi/6)")</syntaxhighlight>
 
{{out}}
<pre>
s(1000) = 1.6439345666816
zeta(2) = 1.6449340668482
</pre>
 
=={{header|XPL0}}==
<langsyntaxhighlight XPL0lang="xpl0">code CrLf=9; code real RlOut=48;
int X; real S;
[S:= 0.0;
for X:= 1 to 1000 do S:= S + 1.0/float(X*X);
RlOut(0, S); CrLf(0);
]</langsyntaxhighlight>
 
Output:
Line 1,871 ⟶ 3,376:
 
=={{header|Yorick}}==
<langsyntaxhighlight lang="yorick">(1./indgen(1:1000)^2)(sum)</langsyntaxhighlight>
 
=={{header|Zig}}==
{{Works with|Zig|0.11.0}}
<syntaxhighlight lang="zig">const std = @import("std");
 
fn f(x: u64) f64 {
return 1 / @as(f64, @floatFromInt(x * x));
}
 
fn sum(comptime func: fn (u64) f64, n: u64) f64 {
var s: f64 = 0.0;
var i: u64 = n;
 
while (i != 0) : (i -= 1)
s += func(i);
 
return s;
}
 
pub fn main() !void {
const stdout = std.io.getStdOut().writer();
try stdout.print("S_1000 = {d:.15}\n", .{sum(f, 1000)});
}</syntaxhighlight>{{out}}
<pre>S_1000 = 1.643934566681560</pre>
 
=={{header|zkl}}==
<langsyntaxhighlight lang="zkl">[1.0..1000].reduce(fcn(p,n){ p + 1.0/(n*n) },0.0) //-->1.64394</langsyntaxhighlight>
 
=={{header|ZX Spectrum Basic}}==
<syntaxhighlight lang="zxbasic">10 LET n=1000
20 LET s=0
30 FOR k=1 TO n
40 LET s=s+1/(k*k)
50 NEXT k
60 PRINT s</syntaxhighlight>
{{out}}
<pre>
1.6439346
 
0 OK, 60:1
</pre>
890

edits