User Tools

Site Tools


td9:part2

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
td9:part2 [2021/11/06 15:14]
bmonsuez [Question n°3]
td9:part2 [2022/11/18 10:48] (current)
Line 1: Line 1:
-====== Partie 2 :Mesuré ​le temps passé par une fonction ======+====== Partie 2 : Mesurer ​le temps passé par une fonction ======
  
 [[in204:​tds:​sujets:​td9|TD9]] [[in204:​tds:​sujets:​td9|TD9]]
Line 65: Line 65:
 ===== Question n°2 ===== ===== Question n°2 =====
  
-Transformer la fonction précédente <​code>​estimate_time</​code>​ pour qu'​elle prenne en argument une fonction arbitraire qui prend un argument et retourne un résultat. ​+Transformer la fonction précédente <​code>​estimate_time</​code>​ pour qu'​elle prenne en argument une fonction arbitraire qui prend un argument et retourne un résultat ​qui ne sera pas obligatoirement un résultat de type ''​long double''​
  
 Il faudra penser à utiliser un modèle (template) de fonctions. Il faudra penser à utiliser un modèle (template) de fonctions.
Line 79: Line 79:
 <code cpp> <code cpp>
 template<​class Function, class T> template<​class Function, class T>
-std::​pair<​std::​chrono::​high_resolution_clock::​duration,​ long double> ​estimate_function_time(Function function, T argument)+auto estimate_function_time(Function function, T argument)
 { {
  auto starting_time = std::​chrono::​high_resolution_clock::​now();​  auto starting_time = std::​chrono::​high_resolution_clock::​now();​
Line 96: Line 96:
  
 <code cpp> <code cpp>
-template<​class ​T1, T2>  +template<​class ​numericalT
-T1 power(T2 x, int y)+numericalT power_by_int(numericalT ​x, int y)
 { {
-   ​T1 ​result = (T1)1.0 +    numericalT ​result = (numericalT)1.0; 
-   ​while(y-- > 0) +    while (y-- > 0) 
-       ​result ​ result * (T1)x; +      result ​*= x; 
-   ​return result;+    return result;
 } }
 </​code>​ </​code>​
Line 114: Line 114:
  
 template<​class Function, class ... Args> template<​class Function, class ... Args>
-std::​pair<​std::​chrono::​high_resolution_clock::​duration,​ long double> ​estimate_function_time(Function function, Args... arguments)+auto estimate_function_time(Function function, Args... arguments)
 { {
  auto starting_time = std::​chrono::​high_resolution_clock::​now();​  auto starting_time = std::​chrono::​high_resolution_clock::​now();​
Line 124: Line 124:
 </​hidden>​ </​hidden>​
  
-Estimer le temps nécesaire pour calculer par exemple : 1.02 ^ 10000000.+Estimer le temps nécesaire pour calculer par exemple : 1.0002 ^ 10000000.
  
 <hidden Correction>​ <hidden Correction>​
Line 140: Line 140:
 ==== Question n°5 ==== ==== Question n°5 ====
  
-Créer une fonction nouvelle qui va appeller la fonction ​<​code>​estimate_time</​code> ​pour calculer ​<​code>​x</​code> ​fois le temps et retourné ​le temps moyen pour effectuer un "​run"​ de la fonction.+Créer une fonction nouvelle qui va appeller la fonction ​ ''​estimate_function_time'' ​pour calculer ​''​x'' ​fois le temps nécessaire pour calculer la fonction ​et qui retourn ​le temps moyen pour effectuer un "​run"​ de la fonction.
  
-Exécuter cette fonction pour les fonctions <​code>​power</​code>​ et <​code>​factorial</​code>​ précédemment définie. 
  
-==== Question n°4 ====+Cette fonction aura l'​entête suivante :
  
-Que faut-il faire ajouter pour dire au compilateur que la fonction ​<​code>​factorial</code> ou que la fonction <code>power</​code> ​peut-être exécutée au moment de l'​exécution ?+<​code ​cpp> 
 +template<class Function, class ... Args> 
 +long long mean_function_time(int number_of_runs,​ Function function, Args... arguments) 
 +
 +... 
 +
 +</​code>​
  
-Effectuer ​la modification.+<hidden Correction>​ 
 + 
 +Il suffit de lancer ''​number_of_runs''​ fois un appel à ''​estimate_function_time''​ pour la fonction et les argumentsCeci donne le code suivant : 
 + 
 +<code cpp> 
 +template<​class Function, class ... Args> 
 +long long mean_function_time(int number_of_runs,​ Function function, Args... arguments) 
 +
 + long long duration = 0L; 
 + int remaining_runs = number_of_runs;​ 
 + while (remaining_runs-- > 0) 
 + duration += estimate_function_time(function,​ arguments...).first.count();​ 
 + return duration / (long long)number_of_runs;​ 
 +
 +</​code>​ 
 + 
 +</​hidden>​
  
-Calculer le temps pris désormais par ces fonctions. 
  
 +[[.td9:​part1|Manipuler un nombre variable de paramètres]]
  
 +[[.td9:​part3|Exécution à la compilation]]
  
  
td9/part2.1636211658.txt.gz · Last modified: 2021/11/06 15:14 by bmonsuez