操作
A/I #9
未完了boost::multiprecision::cpp_bin_float_100とlong double型の処理速度を比較する
開始日:
2025/05/04
期日:
2025/05/06 (約7ヶ月 遅れ)
予定工数:
開発 次郎 さんが7ヶ月前に更新 · 編集済み
- ステータス を 新規 から 進行中 に変更
軽く比較してみる¶
- double型の結果閉じる
sizeof(float80_t) is 8 bytes 30!: except: 265252859812191058636308480000000 actual: 265252859812191032188804700045312.000000. 16 bytes Sin: average: 61 median: 100 max: 300 min: 0 standard deviation:54.580216195980753469 Cos: average: 56 median: 100 max: 300 min: 0 standard deviation:55.353410012392188833 Tan: average: 225 median: 100 max: 17400 min: 0 standard deviation:1726.8685531910064128 Pow: average: 50 median: 0 max: 300 min: 0 standard deviation:55.67764362830021696 Sqrt: average: 43 median: 0 max: 1100 min: 0 standard deviation:115.97844627343478408 LatLonToUTM: average: 924 median: 700 max: 20600 min: 600 standard deviation:1988.2716112241807878 - long double型の結果閉じる
sizeof(float80_t) is 16 bytes 30!: except: 265252859812191058636308480000000 actual: 265252859812191058647452510846976.000000. 19 bytes Sin: average: 73 median: 100 max: 300 min: 0 standard deviation:50.705029336348871993 Cos: average: 70 median: 100 max: 200 min: 0 standard deviation:47.958315233127194688 Tan: average: 62 median: 100 max: 100 min: 0 standard deviation:48.538644398046386641 Pow: average: 68 median: 100 max: 800 min: 0 standard deviation:88.181630740194407281 Sqrt: average: 65 median: 100 max: 200 min: 0 standard deviation:49.749371855330998926 LatLonToUTM: average: 1356 median: 1300 max: 2100 min: 1300 standard deviation:89.799777282574595461 - boost::multiprecision::int128_t型の結果閉じる
sizeof(float80_t) is 80 bytes 30!: except: 265252859812191058636308480000000 actual: 265252859812191058636308480000000. 33 bytes Sin: average: 94084 median: 91000 max: 241600 min: 90400 standard deviation:17624.447338852925895 Cos: average: 100093 median: 92500 max: 221300 min: 91400 standard deviation:20025.505012358615204 Tan: average: 195134 median: 185500 max: 326300 min: 184100 standard deviation:24873.010352589008107 Pow: average: 13334 median: 10600 max: 56500 min: 10400 standard deviation:7845.37086440150415 Sqrt: average: 17856 median: 12300 max: 323500 min: 11300 standard deviation:31621.734044798999093 LatLonToUTM: average: 1083944 median: 1046000 max: 1595100 min: 1038900 standard deviation:84690.01513755916676
メモ¶
- boostは1_88_0をpacmanでインストールしたものであり、1_53_0ではない
- boost::multiprecisionにはsinとcos関数がない?
- powはある
- 使いどころによってはずいぶん変わるんだろうなぁ
- 現時点、使いどころはかなり適当(≒処理で使う変数のごく一部に差をつけているだけ)
- 浮動小数点数すべてを切り替えていない
開発 次郎 さんが7ヶ月前に更新 · 編集済み
GCC4で比較してみる¶
std::chronoは使わず、CPUクロック・カウントを使うように変更した。
どうやら、GCC4では制度が悪いらしい(sin関数程度ならゼロナノ秒となってしまう)
- double型の結果閉じる
sizeof(float80_t) is 8 bytes 30!: except: 265252859812191058636308480000000 actual: 265252859812191032188804700045312.000000. 16 bytes Sin: average: 332.04000000000002046 median: 284 max: 4862 min: 274 standard deviation:455.43253990025783651 Cos: average: 276.10000000000002274 median: 268 max: 768 min: 262 standard deviation:50.587251358420260772 Tan: average: 703.10000000000002274 median: 224 max: 47530 min: 216 standard deviation:4706.3367102237807558 Pow: average: 249.41999999999998749 median: 232 max: 1784 min: 226 standard deviation:154.41665583738046053 Sqrt: average: 200.65999999999999659 median: 190 max: 1476 min: 174 standard deviation:128.82858533726124506 LatLonToUTM: average: 2436.7600000000002183 median: 2355 max: 8644 min: 2322 standard deviation:626.98604641570670992 - long double型の結果閉じる
sizeof(float80_t) is 16 bytes 30!: except: 265252859812191058636308480000000 actual: 265252859812191058647452510846976.000000. 19 bytes Sin: average: 298.74000000000000909 median: 274 max: 1842 min: 262 standard deviation:156.99086725029582112 Cos: average: 301.18000000000000682 median: 284 max: 920 min: 272 standard deviation:65.520741754043072547 Tan: average: 295.77999999999997272 median: 292 max: 882 min: 260 standard deviation:60.826898655118206705 Pow: average: 329.83999999999997499 median: 310 max: 3344 min: 266 standard deviation:303.98245738858025788 Sqrt: average: 194.21999999999999886 median: 184 max: 720 min: 176 standard deviation:55.633008187585922144 LatLonToUTM: average: 4508.8999999999996362 median: 4438 max: 8390 min: 4302 standard deviation:457.52240382303000388 - boost::multiprecision::int128_t型の結果閉じる
sizeof(float80_t) is 80 bytes 30!: except: 265252859812191058636308480000000 actual: 265252859812191058636308480000000. 33 bytes Sin: average: 872262.23999999999069 median: 613004 max: 1524794 min: 317578 standard deviation:507134.42825272906339 Cos: average: 575962.71999999997206 median: 563428 max: 897384 min: 560330 standard deviation:40034.271968423345243 Tan: average: 695393.31999999994878 median: 612512 max: 1258990 min: 606536 standard deviation:178060.5066051921458 Pow: average: 25981.93999999999869 median: 15891 max: 168470 min: 15206 standard deviation:26062.572311197531235 Sqrt: average: 155498.94000000000233 median: 148743 max: 357658 min: 147524 standard deviation:30843.161308082519099 LatLonToUTM: average: 3658002.7400000002235 median: 3526710 max: 5118250 min: 3505996 standard deviation:328519.87822068069363
トラブルシューティング¶
- ERROR: During startup program exited with code 0xc0000135.
- 現象
- VSCodeから「デバッグ開始」で実行しようとしても、上記エラーになって実行できない
- プログラムは正常終了している??いやprintf分が出力されていないから違うな
- The program 'D:\temp\test01\cmake_cpp_multilang\build\example\ConsoleMsys2\example.exe' has exited with code 0 (0x00000000).
- プログラムは正常終了している??いやprintf分が出力されていないから違うな
- VSCodeから「デバッグ開始」で実行しようとしても、上記エラーになって実行できない
- 解決策
- 今のところない。 VSCodeでなく手導なら可能だし、そもそもデバッグすることは少ないと考えられるため、(今は)これ以上追及しない
- 試したこと
- Windowsの世界でもMinGW64.GCC485のgdbを実行できるようにPATHを通した
- launch.jsonで直PATH指定するのと変わらない
- マニュアルでgdb example\ConsoleMsys2\example.exeだと実行できる
- Windowsの世界でもMinGW64.GCC485のgdbを実行できるようにPATHを通した
- 現象
操作