c言語でナノ秒時間測定
1 2 3 4 5 |
int nsec = tsEnd.tv_nsec - tsStart.tv_nsec; int secSpan = tsEnd.tv_sec - tsStart.tv_sec; if(0 < secSpan){ nsec += secSpan * 1000000000; } |
がポイント
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
#include <stdio.h> #include <math.h> #include <time.h> // int timespec_get (struct timespec *ts, int base) int isPrime(int n){ if(n<=1){ return 0; } if(2==n || 3==n){ return 1; } int square_root = (int)sqrt(n); for(int i=2; i<=square_root; i++){ if(0==n%i){ return 0; } } return 1; } int dispIsPrime(int n){ printf("%dは", n); if(isPrime(n)){ printf(" ... 素数"); } printf("\n"); } /* 1000000万以下の素数の個数を算出するアルゴリズムの速度を求める */ int main(){ struct timespec tsStart, tsEnd; timespec_get(&tsStart, TIME_UTC); int n = 1000000; int cnt = 0; for(int i=-5; i<=n; i++){ if(isPrime(i)){ cnt++; } } printf("%d以下の素数の数 : %d\n", n, cnt); timespec_get(&tsEnd, TIME_UTC); printf("%ld %09ld\n", tsStart.tv_sec, tsStart.tv_nsec); printf("%ld %09ld\n", tsEnd.tv_sec, tsEnd.tv_nsec); int nsec = tsEnd.tv_nsec - tsStart.tv_nsec; int secSpan = tsEnd.tv_sec - tsStart.tv_sec; if(0 < secSpan){ nsec += secSpan * 1000000000; } printf("所要時間 %d ナノ秒\n", nsec); } |
1 2 3 4 |
1000000以下の素数の数 : 78498 1521134295 797056797 1521134296 022770585 所要時間 225713788 ナノ秒 |