このコードは、大学でのサンプリング課題用に作成したものです。
#include <sys/time.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int main(int argc, char **argv){
struct timeval tv;
float t = atoi(argv[1]); //sampling time period in sec's
float dt = atoi(argv[2]); //sampling rate in msec's
double time;
int nsamples = t/dt * 1000; //number of samples floored
//samples storage array
double *samples;
samples = malloc(nsamples);
printf("%d\n\n",nsamples);
int c = 0; //array index
double divergance;
gettimeofday(&tv, NULL);
time =(double) tv.tv_sec + tv.tv_usec / 1000000.0f;
samples[c] = time;
printf("time: %f\n", samples[c]);
usleep(dt * 1000);
while(c<nsamples){
c++;
gettimeofday(&tv, NULL);
time = (double) tv.tv_sec + tv.tv_usec / 1000000.0f;
samples[c] = time;
//divergance calculated in msec's
divergance = (samples[c] - samples[c-1]);
if (c==9){
printf("%f \n \n%f", samples[c-1], samples[c]);
}
printf("time: %f\ndivergance: %f ms\n\n", samples[c], divergance*1000);
usleep(dt *1000);
}
}
これが私の出力です
時間: 1557335682.435666 発散: 200.127125 ミリ秒
時間: 1557335682.635813 発散: 200.146914 ミリ秒
時間: 1557335682.835952 発散: 200.139046 ミリ秒
時間: 1557335683.036075 発散: 200.123072 ミリ秒
time: 1557335683.236192 divergance: -50328976507548121002151598324465532616014103321089770750300716493231241208217866953937760599346823570331739493744117764925654540012842402655523878795775819489233146901362588461216017208320541658368563434403808909221817741213696.000000 ms
時間: 1557335683.436400 発散: 1557335683436.399902 ミリ秒
時間: 1557335683.636521 発散: 1557335683636.520752 ミリ秒
時間: 1557335683.836647 発散: 1557335683836.646973 ミリ秒
5番目の計算で奇妙な出力が何であるかを誰かが理解していますか? 以前に同様の「バグ」に遭遇したことがないため、論理的な説明を想像することはできません。それは機能の特定の特徴と関係がありgettimeofday()
ますか?
注: 入力は10
andです200