如果有人發現截至2019.1.30之前的評論和本文內容對不上,那是因為該日之前演算法有過一次大的更新,以至於本文應該被重寫。目前的內容是2019.1.30重寫的以及此後在此基礎之上進行的非顯著修改的結果。此前的版本見如下備份。

astrojhgu/adaptrapezoid_benchmark?

github.com圖標

o/o/o/o/o/o/o/o/以o/o/o/o/o/o/o/o/

o/o/o/o/o/o/o/o/下o/o/o/o/o/o/o/o/

o/o/o/o/o/o/o/o/是o/o/o/o/o/o/o/o/

o/o/o/o/o/o/o/o/正o/o/o/o/o/o/o/o/

o/o/o/o/o/o/o/o/文o/o/o/o/o/o/o/o/

關於為什麼要寫這一系列的文章,請先閱讀

astrojhgu:對幾種科學計算候選語言的性能比較(目錄)?

zhuanlan.zhihu.com圖標

本文描述了利用Rust實現自適應梯形積分演算法並進行benchmark的結果。

代碼見

astrojhgu/adaptrapezoid_benchmark?

github.com
圖標

Benchmark的結果是:

$> cargo bench  101 ?  1039021:09:48
Finished release [optimized] target(s) in 0.08s
Running target/release/deps/adaptrapezoid-d729b77474b0c33d

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out

Running target/release/deps/adaptrapezoid-6aad677eb5393d38

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out

Running target/release/deps/bench-e215e29b5c8c394a
with sorting time: [110.23 ms 111.25 ms 112.25 ms]
change: [-1.7749% -1.4731% -0.9777%] (p = 0.00 < 0.05)
Change within noise threshold.
Found 6 outliers among 30 measurements (20.00%)
6 (20.00%) high severe

no sorting time: [73.046 ms 73.303 ms 73.851 ms]
change: [-2.5982% -1.2036% -0.0089%] (p = 0.60 > 0.05)
No change in performance detected.
Found 6 outliers among 30 measurements (20.00%)
2 (6.67%) high mild
4 (13.33%) high severe

結論是,如果對子區間結果先排序再求和(以降低浮點數運算舍入誤差)那麼每一次積分運算耗時大約110+ms,如果不排序,直接求和則每次積分運算耗時大約70+ms。

就速度而言,比C++還略微快了那麼一點。

推薦閱讀:

相关文章