2016-12-09 2 views
0

두 개의 행렬 unsigned char 사이의 차이를 계산하기 위해 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 수 있습니다.

물론 내부적으로 saturation SIMD 명령어 (예 : SSE2가있는 경우 _mm_subs_epi8)를 사용해야하지만 이상적으로는 Eigen에 통합하기가 쉽지 않습니다. 특히 매트릭스 크기가 16 바이트의 배수가 아닌 경우 더욱 그렇습니다.