yohhoyの日記

技術的メモをしていきたい日記

2022-01-01から1ヶ月間の記事一覧

クラステンプレート特殊化型判定

C++

プログラミング言語C++において、与えられた型があるクラステンプレートの特殊化(specialization)か否かを判定する方法。下記コードは複素数std::complexの特殊化か否かを判定するメタ関数およびコンセプト実装例。 // C++11/14/17: is_complexメタ関数 #inc…

Math.min@浮動小数点数の実装

Java標準ライブラリMath.minメソッドの実装についてメモ。浮動小数点数型(float, double)に対するminでは、NaN(Not a Number)および負のゼロ(-0.0)を考慮する必要がある。*1 public static double min(double a, double b) { if (a != a) return a; // a is …

C++ min/maxアルゴリズムの正しい実装

C++

C++標準ライブラリstd::min, std::maxアルゴリズムの動作仕様についてメモ。 問題:C++ min/maxアルゴリズムを「正しく」実装せよ。 template <typename T> const T& min(const T& a, const T& b) { // どちらのmin実装が正しい? return a < b ? a : b; // #1 return b </typename>…

move in accumulateアルゴリズム

C++

C++20標準ヘッダ<numeric>のstd::accumulateアルゴリズム内部実装では、T型のアキュムレータ変数(acc)への累積操作時にstd::move関数適用(右辺値への変換)が規定される。 // C++20仕様の累積演算(1要素あたり) acc = std::move(acc) + *iterator; // ^^^^^^^^^^^^</numeric>…