// chapitre 7 template fonction.cpp : définit le point d'entrée pour l'application console.
//

#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>

template<class T> void vecteur_add(T*vect,int n,T valeur)

{
	for(int i=0;i<n;i++)
		vect[i]+=valeur;
}

template<class T> void vecteur_add(T& vect,T valeur)

{	
	vect+=valeur;
}


template<class T> T cosinus(T a)
{
	int i;
	T cos=1;
	T pa=a*a;
	int pf=2;
	T signe=-1;

	for(i=2;i<=14;i+=2)
	{			
		cos+=signe*pa/pf;
		signe=-signe;
		pa=pa*a*a;
		pf=pf*(i+1);
		pf=pf*(i+2);		
	}
	return cos; 
}

//template<double> double cosinus(double a)
//{
//	return cos(a);
//}

int main(int argc, char* argv[])
{	
	double valeurs[]={3,-9,8.2,5 };
	vecteur_add(valeurs,4,3.0);
	vecteur_add(valeurs[0],(double) 3);




	time_t   start, finish;   
	double   result, elapsed_time;   
	
	int N=3000;
	// 1000000 cosinus en float
	time( &start );			
	float a1=3.14159265358F/2;	
	float r1;
	for(int i=0; i<N; i++)
	{		
		r1=cosinus(a1);
	}		
	time( &finish );
	elapsed_time = difftime( finish, start );
	
	printf("%d cosinus en float, r=%f\n",N,r1);
	printf("Duree du calcul :  %6.0f secondes.\n", elapsed_time );

	// 1 000 000 cosinus en double
	time( &start );	
	long double a2=3.14159265358/2;
	long double r2;
	for(int i=0; i<N; i++)
	{		
		r2=cosinus(a2);
	}	
	time( &finish );
	elapsed_time = difftime( finish, start );

	printf("\n%d cosinus en long double, %g\n",N,r2);
	printf( "Duree du calcul :  %6.0f secondes.\n", elapsed_time );

	return 0;
}

