2016-12-09 9 views
0

unsigned charの2つの行列の差を計算するためにEigenを使用しています。符号なしタイプの固有演算

Eigen::Matrix<unsigned char, 4, 1> C0; 
Eigen::Matrix<unsigned char, 4, 1> C1; 
C0 << 255, 0, 127, 1; 
C1 << 0, 255, 128, 255; 
std::cout << (C0 - C1).cast<int>() << "\n"; 

結果は255 1 255 2である。アンダーフロー(またはオーバーフローが追加の場合はオーバーフロー)の場合に操作が飽和し、255 0 0 0という結果になります。アイゲンとそれは可能ですか?

答えて

2

これのためにEigen内には何もすぐにはありません。あなたが意図したように、operator-などをオーバーロードするprovide a custom typeがあります。

当然ながら、これは内部的に飽和したSIMD命令(例えばSSE2がある場合は_mm_subs_epi8)を使うべきですが、特に行列サイズが16バイトの倍数でない場合は、Eigenに統合するのが簡単ではありません。

関連する問題