C 时钟()仅返回零
C++ clock() only returns zero
我有一个具有2个功能的C 的程序。该程序的目标是查看哪个功能需要更多的时间。
ps:代码执行以下操作:您输入一个数字" n",并且该程序将每个数字少或等于" n",这些数字可以由5或3分组。
例如。n =15。总和= 15 12 10 9 6 6 5 3 = 60
#include <iostream>
#include <math.h>
#include <cmath>
#include <time.h>
#include <stdio.h>
using namespace std;
double Funktion(double Wert){
double Summe = 0;
int Index;
bool Wiederholung;
for(Index = Wert;Index >= 3;Index--){
if(Index % 3 == 0)
{
Summe = Summe + Index;
Wiederholung = false;
}
if(Index % 5 == 0 && Wiederholung == true)
{
Summe = Summe + Index;
}
Wiederholung = true;
}
return Summe;
}
double Funktion2(double Wert){
double Summe = 0;
int Abweichung1 = std::fmod(Wert,3);
int Abweichung2 = std::fmod(Wert,5);
int Abweichung3 = std::fmod(Wert,15);
double Wert_3;
double Wert_5;
double Wert_15;
Wert_3 = Wert - Abweichung1;
Wert_5 = Wert - Abweichung2;
Wert_15 = Wert - Abweichung3;
Summe = (Wert_3+3)*((Wert_3/3)/2);
Summe = (Wert_5+5)*((Wert_5/5)/2)+Summe;
Summe = Summe-(Wert_15+15)*((Wert_15/15)/2);
return Summe;
}
int main()
{
double Zahl;
cout << "Welche Zahl wollen Sie aufsummieren lassen?: ";
cin >> Zahl;
clock_t t1;
clock_t t2;
double Rueckgabezahl;
double Rueckgabezahl2;
t1 = clock();
Rueckgabezahl = Funktion(Zahl);
t1 = clock()-t1;
t2 = clock();
Rueckgabezahl2 = Funktion2(Zahl);
t2 = clock()-t2;
cout << endl << std::fixed << "Aufsummierte Zahl (mit Loop): " << Rueckgabezahl << endl;
printf("Zeit (in sek): %f", ((float)t1)/CLOCKS_PER_SEC);
cout << endl << endl << std::fixed << "Aufsummierte Zahl (ohne Loop): " << Rueckgabezahl2 << endl;
printf("Zeit (in sek): %f", (float)t2/CLOCKS_PER_SEC);
}
我研究了如何通过clock_t建立时间计数器的多个示例。首先,我建立了一个clock_t t1,然后用t1 = clock()测量了时间(tick),然后(在功能之后)我测量了该功能所采用的滴答(t1 = clock() - t1)。
在其他项目中,此方法有效。但是在这种特定代码中,情况并非如此。它总是返回0.00000。
我的错误是什么?
如果您有任何疑问,请随时提出。
问候Q
C 中的变量声明不需要任何时间。所以,您是否写
t1 = clock();
double Rueckgabezahl;
t1 = clock()-t1;
或仅t1 = clock()-clock()
具有相同的结果。
您最有可能尝试测量的是:
clock_t t1, t2;
double Rueckgabezahl, Ruckgabezahl2;
t1 = clock();
Rueckgabezahl = Funktion(Zahl);
t1 = clock()-t1;
t2 = clock();
Rueckgabezahl2 = Funktion2(Zahl);
t2 = clock()-t2;
,但即使那样,您也不会获得任何令人印象深刻的结果。CPU几乎没有任何事情可以在代码中实际执行,因此您可能需要使用更高的分辨率时钟来获得可测量的结果。或者,您知道,将功能代码循环100000次左右。但是,即使您这样做,也要在打印之前将时间投入到几秒钟之前...结果您仍然会得到0秒。您还必须关闭优化,因为否则将100000次调用该方法很可能没有效果。
作为旁注:通常不愿使用转化为关键字的变量名称,例如'funktion'(〜函数)。另外,您可能应该切换到Alltogether的英文名称。我从未见过一个实际使用德语变量名称的项目,这对我来说似乎很奇怪,更不用说如果与其他可能不会说话的人合作是不做的。此外(而且这不仅适用于C ,变量名称通常是骆驼箱(Java style)或Lower_case(C风格)。没有确定的正确方法,建议取决于编程语言,但您应该始终始终尝试尽可能地遵循现有和常见的准则。
此代码没有显示 clock
返回零。clock()
的两个测量值是零。您正在测量执行不需要时间的操作所需的时间,该操作小于1 clock
tick。
成像clock()
在t1 = clock();
返回42
。语句double Rueckgabezahl;
根本不需要时间,因此clock
将返回与以前相同的值。t1 = clock()-t1;
等于t1 = 42 - 42;
,您可以从中获得t1 = 0;
的位置。
您可以尝试使用std::high_resolution_clock
,但是您甚至可能无法进行测量。您将衡量阅读时钟需要多长时间。
- 在C++/Linux中设置单调时钟的一些技巧
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- 什么时候在C++中返回常量引用是个好主意
- 你能重载对象变量名本身返回的内容吗
- 为什么 Serial.println(<char[]>);返回随机字符?
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 如何获取std::result_of函数的返回类型
- QueryWorkingSet总是返回false
- (C++)分析树以计算返回错误值的简单算术表达式
- 访问者访问变体并返回不同类型时出错
- 如何返回一个类的两个对象相加的结果
- OpenInventor从9.8升级到10.4.2后,GLSL纹理返回零
- lower_bound()返回最后一个元素
- "throw expression code" 1e7 >返回 d 是什么?投掷标准::overflow_error( "too big" ) : d;意味 着?
- 奇怪的(对我来说)返回声明 - 在谷歌上找不到任何关于它的信息
- 如何取消对nullptr的屏蔽,返回正确的对象
- 奇怪的结构&GCC&clang(void*返回类型)
- 架构决策:返回std::future还是提供回调
- 时钟功能返回零时差
- C 时钟()仅返回零