# 2017q1 Homework1 (compute-pi)
contributed by < `hunng` >
### Reviewed by divazone
* 請盡快將修改提交至github上
* 為何OpenMP(2 threads)的突起較多?而4 threas卻沒這現象?
## 開發環境
* OS: Ubuntu 16.04.2 LTS
* Architecture: x86_64
* CPU op-mode(s): 32-bit, 64-bit
* CPU(s): 4
* CPU Model name: Intel(R) Core(TM) i5-4200U CPU @ 1.60 GHz
* L1d cache: 32 K
* L1i cache: 32 K
* L2 cache: 256 K
* L3 cache: 3072 K
* MemTotal: 8056592 KB
## 原程式分析

圖中有過多的突起,並且因為這些突起導致其他數據的增益不明顯
```c
clock_gettime(CLOCK_ID, &start);
for (i = 0; i < loop; i++) {
compute_pi_baseline(N);
}
clock_gettime(CLOCK_ID, &end);
```
可以利用信賴區間來捨棄部份不合理數據(參考自 [廖健富](https://hackpad.com/Hw1-Extcompute_pi-geXUeYjdv1I))
## 信賴區間程式碼實作
因為設想未來可能可以在資料分析的狀況使用
設計一個 struct 去實現
```
typedef struct __SIGMA_NODE {
double stor;
int confide;
struct __SIGMA_NODE *NEXT;
} numb;
```
多設定一個 confide 是要在 confidenum() 後,認定此數據不具參考性,即忽略此數據
以下為對應的 function
```
numb *appendnum(numb *a, double addit);
double sumnum(numb *a);
double avernum(numb *a);
double sigmanum(numb *a);
void confidenum(numb *a);
```
套用進 benchmark_clock_gettime.c
```
for (i = 0; i < loop; i++) {
clock_gettime(CLOCK_ID, &start);
compute_pi_baseline(N);
clock_gettime(CLOCK_ID, &end);
a = appendnum(a, (double) (end.tv_sec - start.tv_sec) + (end.tv_nsec - start.tv_nsec)/ONE_SEC);
}
confidenum(HEAD);
printf("%lf ", avernum(HEAD));
```