2
A
回答
1
可以模擬飽和簽名添加由執行以下步驟:
int saturated_add(int a, int b)
{
int sum = a + b;
if (a >= 0 && b >= 0)
return sum > 0 ? sum : INT32_MAX; // catch positive wraparound
else if (a < 0 && b < 0)
return sum > 0 ? INT32_MIN : sum; // catch negative wraparound
else
return sum; // sum of pos + neg always fits
}
無符號,它更簡單,看this stackoverflow posting
在SSE2,上述映射到的序列並行比較和AND/ANDN操作。不幸的是,沒有單一的操作
1
飽和無符號減法,是很容易的,因爲對於一個` - = B」,我們可以做
asm (
"pmaxud %1, %0\n\t" // a = max (a,b)
"psubd %1, %0" // a -= b
: "+x" (a)
: "xm" (b)
);
與SSE。
我正在尋找無符號的加法,但可能唯一的辦法是轉換爲飽和的無符號減法,執行它並轉換回來。相同的簽名變體。
編輯:與無符號的加法,你得到min (a, ~b) + b
這種方式,這當然有效。使用帶符號的加法和減法,您有兩個飽和邊界,這使事情變得複雜。
相關問題
- 1. NEON:如何將飽和度的128位ARGB轉換爲32位ARGB?
- 2. 增加圖像飽和度
- 3. C中的按位飽和加法(HW)
- 4. 如何在Xlib中將具有給定寬度和高度的32位RGB字符串加載到Pixmap中?
- 5. 如何保證NSColor具有足夠的飽和度?
- 6. Matlab fwrite飽和度
- 7. 添加32位用C
- 8. 用sass mixin增加顏色飽和度
- 9. 具有相同GUID的32位和64位ActiveX?
- 10. 將32位位圖添加到ImageList
- 11. 使用具有32位深度緩衝區的FBO配置
- 12. 具有32位Java的Docker Wildfly映像
- 13. Bootstrap Alerts顏色飽和度
- 14. gnuplot pdfcairo色彩飽和度
- 15. SCSS絕對飽和度
- 16. 圖像顏色飽和度
- 17. CSS3 HSL - 飽和度值(僅)
- 18. 如何去色飽和度?
- 19. 如何在python中的圖像上添加文字以及一些飽和度和亮度調整?
- 20. 使用32位算法添加64位數字
- 21. 動態添加的TextView具有零寬度和高度
- 22. 32位灰度BufferedImage?
- 23. 飽和度和亮度有什麼區別?
- 24. 如何獲得位圖的平均色調/飽和度?
- 25. 如何調整位圖的色調/飽和度?
- 26. 無法保存已更改的位圖(已更改飽和度)
- 27. 具有32/16位分區的處理器上的64/32位分區
- 28. 具有溢出,符號和零標記的Verilog 32位ALU
- 29. CGFloat:round,floor,abs和32/64位精度
- 30. 32位和64位的ODP.NET
請參閱[Agner Fog的矢量類庫](http://www.agner.org/optimize/#vectorclass),瞭解使用C++內在函數進行加法和減法的實現。 GPLed源代碼的副本[https://github.com/pcordes/vectorclass/blob/77522287e64da5e887d69659e144d2caa5d3a4f1/vectori128.h#L2189],使用異或來檢查相同/不同的符號,並將/ PANDN/PADDD以確定結果。 –