Sum of a series: Difference between revisions

From Rosetta Code
Content added Content deleted
(Forth, generic on bounds and function)
(Riemann zeta(2))
Line 1: Line 1:
{{task}}Display the sum of a finite series for a given range.
{{task}}Display the sum of a finite series for a given range.


For this task, use S(x) = 1/x^2, from 1 to 1000.
For this task, use S(x) = 1/x^2, from 1 to 1000. (This approximates the Riemann zeta function. The Basel problem solved this: zeta(2) = π<sup>2</sup>/6.)


=={{header|C++}}==
=={{header|C++}}==

Revision as of 17:20, 22 February 2008

Task
Sum of a series
You are encouraged to solve this task according to the task description, using any language you may know.

Display the sum of a finite series for a given range.

For this task, use S(x) = 1/x^2, from 1 to 1000. (This approximates the Riemann zeta function. The Basel problem solved this: zeta(2) = π2/6.)

C++

#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 / ( x * x ) );
}

D

module series ;
import std.stdio ;

T series(T)(T function(int) t, int end, int start = 1 /* 0 if zero base*/ ) {
  T sum = 0 ;
  for(int i = start ; i <= end ; i++)
    sum += t(i) ;
  return sum ;
}
real term(int n){
  return 1.0L/(n*n) ;
}
void main(){
    writef("sum@[1..1000] = ", series(&term, 1000)) ;
}

Forth

: sum ( fn start count -- fsum )
  0e
  bounds do
    i s>d d>f dup execute f+
  loop drop ;

:noname ( x -- 1/x^2 ) fdup f* 1/f ;   ( xt )
1 1000 sum f.       \ 1.64393456668156

Java

public class Sum{
   public static double f(double x){
      return 1/(x*x);
   }

   public static void main(String[] args){
      double start = 1;
      double end = 1000;
      double sum = 0;

      for(double x = start;x <= end;x++) sum += f(x);

      System.out.println("Sum of f(x) from " + start + " to " + end +" is " + sum);
   }
}