プログラムの実行にかかる合計時間を教えてくれるように、プログラムに追加するCコードの行を知りたいのですが。mainの開始近くと、main関数の終了後にカウンターの初期化が必要だと思います。正しいヘッダーclock.h
ですか?
どうもありがとう...
更新私はWinXpマシンを持っています。clock()
プログラムの最初とclock()
最後に追加するだけですか?次に、時差を見積もることができます。はい、その通りですtime.h
。
これが私のコードです:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <share.h>
#include <time.h>
void f(long double fb[], long double fA, long double fB);
int main() {
clock_t start, end;
start = clock();
const int ARRAY_SIZE = 11;
long double* z = (long double*) malloc(sizeof (long double) * ARRAY_SIZE);
int i;
long double A, B;
if (z == NULL) {
printf("Out of memory\n");
exit(-1);
}
A = 0.5;
B = 2;
for (i = 0; i < ARRAY_SIZE; i++) {
z[i] = 0;
}
z[1] = 5;
f(z, A, B);
for (i = 0; i < ARRAY_SIZE; i++)
printf("z is %.16Le\n", z[i]);
free(z);
z = NULL;
end = clock();
printf("Took %ld ticks\n", end-start);
printf("Took %f seconds\n", (double)(end-start)/CLOCKS_PER_SEC);
return 0;
}
void f(long double fb[], long double fA, long double fB) {
fb[0] = fb[1]* fA;
fb[1] = fb[1] - 1;
return;
}
MVS2008のいくつかのエラー:
testim.c(16):エラーC2143:構文エラー:';'がありません 'const'の前 testim.c(18):error C2143:構文エラー:';'がありません 'タイプ'の前 testim.c(20):error C2143:構文エラー:欠落している';' 'タイプ'の前 testim.c(21):error C2143:構文エラー:';'がありません 'タイプ'の前 testim.c(23):エラーC2065:'z':宣言されていない識別子 testim.c(23):warning C4047:'==':'int'は、'void*'とは間接レベルが異なります testim.c(28):エラーC2065:'A':宣言されていない識別子 testim.c(28):警告C4244:'=':'double'から'int'への変換、データが失われる可能性があります
そしてそれは28のエラーになります。あなたの時計コードがなければ、エラーや警告は出ないことに注意してください。
最新ニュース:残念ながら、ここでは良い回答が得られませんでした。しかし、Googleで検索した後、コードは機能しています。ここにあります:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
void f(long double fb[], long double fA);
int main() {
clock_t start = clock();
const int ARRAY_SIZE = 11;
long double* z = (long double*) malloc(sizeof (long double) * ARRAY_SIZE);
int i;
long double A;
if (z == NULL) {
printf("Out of memory\n");
exit(-1);
}
A = 0.5;
for (i = 0; i < ARRAY_SIZE; i++) {
z[i] = 0;
}
z[1] = 5;
f(z, A);
for (i = 0; i < ARRAY_SIZE; i++)
printf("z is %.16Le\n", z[i]);
free(z);
z = NULL;
printf("Took %f seconds\n", ((double)clock()-start)/CLOCKS_PER_SEC);
return 0;
}
void f(long double fb[], long double fA) {
fb[0] = fb[1]* fA;
fb[1] = fb[1] - 1;
return;
}
乾杯
4月10日の更新:「JustJeff」のおかげでより良い解決策があります
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
void f(long double fb[], long double fA);
const int ARRAY_SIZE = 11;
int main(void)
{
long double* z = (long double*) malloc(sizeof (long double) * ARRAY_SIZE);
int i;
long double A;
LARGE_INTEGER freq;
LARGE_INTEGER t0, tF, tDiff;
double elapsedTime;
double resolution;
if (z == NULL) {
printf("Out of memory\n");
exit(-1);
}
QueryPerformanceFrequency(&freq);
QueryPerformanceCounter(&t0);
// code to be timed goes HERE
{
A = 0.5;
for (i = 0; i < ARRAY_SIZE; i++) {
z[i] = 0;
}
z[1] = 5;
f(z, A);
for (i = 0; i < ARRAY_SIZE; i++)
printf("z is %.16Le\n", z[i]);
free(z);
z = NULL;
}
QueryPerformanceCounter(&tF);
tDiff.QuadPart = tF.QuadPart - t0.QuadPart;
elapsedTime = tDiff.QuadPart / (double) freq.QuadPart;
resolution = 1.0 / (double) freq.QuadPart;
printf("Your performance counter ticks %I64u times per second\n", freq.QuadPart);
printf("Resolution is %lf nanoseconds\n", resolution*1e9);
printf("Code under test took %lf sec\n", elapsedTime);
return 0;
}
void f(long double fb[], long double fA) {
fb[0] = fb[1]* fA;
fb[1] = fb[1] - 1;
return;
}
MVS2008と2003年のBorlandC++builderXの両方で動作します。