(r + 1 +(r >> 8))>> 8是什么?

exebook

在一些与C / C ++图形相关的旧代码中,我必须移植到Java和JavaScript,我发现了这一点:

b = (b+1 + (b >> 8)) >> 8; // very fast

哪里bshort int蓝色,而相同的代码会被视作rb(红色和蓝色)。该评论没有帮助。

除了明显的移动和添加之外,我无法弄清楚它的作用。我可以不加理解地移植,我只是出于好奇而问。

布伦特·布拉德本
y = ( x + 1 + (x>>8) ) >> 8 // very fast

这是除以255的定点近似值从概念上讲,这对于基于像素值的标准化计算非常有用,这样255(通常是最大像素值)就精确地映射到1。

它被描述为非常快,因为完全通用的整数除法在许多CPU上都是相对较慢的操作-尽管如果编译器可以推断出输入约束,则可能为您进行类似的优化。

这是基于257/(256*256)非常近似的思想进行的1/255x*257/256可以表示为x+(x>>8)+1被舍入支持,允许公式完全匹配整数除法x/255的所有值x在[0..65534]。

内部的一些代数可能会使情况变得更加清晰。

       x*257/256
     = (x*256+x)/256
     = x + x/256
     = x + (x>>8)

这里还有更多讨论:如何快速进行Alpha混合?在这里:通过乘法除法


顺便说一句,如果您想四舍五入,并且您的CPU可以进行快速乘法运算,则对于所有uint16_t分红值,以下内容都是准确的-实际为[0 ..(2 ^ 16)+126]。

y = ((x+128)*257)>>16 // divide by 255 with round-to-nearest for x in [0..65662]

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

K&R练习1-8改进

来自分类Dev

nppiCopyConstBorder_8u_C1R中的性能下降

来自分类Dev

这是什么文件SametimeTable_1(8GB)

来自分类Dev

将 R8G8B8A8 映像复制到 R8G8B8

来自分类Dev

R`dplyr`代码:`iris%>%dim(。)[1]`是什么意思?

来自分类Dev

“R”的目的是什么?

来自分类Dev

如果二进制是0和1,为什么在二进制文件和程序中看到类似\ x8c \ x8e \ xfc \ r \ xc3 \ x8a的内容?

来自分类Dev

cuda-memcheck报告nppiFilterGauss_8u_C1R超出范围

来自分类Dev

在 R 中将默认 html 编码转换为 UTF-8 或 latin1

来自分类Dev

R 反应元素:在通用 id 中使用“i”(对于 1:8 中的 i)

来自分类Dev

R 错误:1:输入的 UTF-8 不正确,请指出编码!XML到列表

来自分类Dev

如何重复序列:r中的1,2,3,4,5,6,1,2,3,4,5,6,7,8,9,10,7,8,9,10

来自分类Dev

表面格式为B8G8R8A8_UNORM,但vkCmdClearColorImage是否为float?

来自分类Dev

表面格式为B8G8R8A8_UNORM,但vkCmdClearColorImage是否为float?

来自分类Dev

当后缓冲区格式为DXGI_FORMAT_B8G8R8A8_UNORM时,为什么像素着色器返回float4?

来自分类Dev

R的UTF-8编码问题

来自分类Dev

如何让R维护utf8编码?

来自分类Dev

禁用特定口味的R8

来自分类Dev

R8缩小:多次定义类型

来自分类Dev

R在8行之后添加空行

来自分类Dev

R中的“ {”类是什么?

来自分类Dev

R中的NearZeroVar是什么?

来自分类Dev

那些“ .g> .r> a”是什么

来自分类Dev

WebStorm中的^ R是什么

来自分类Dev

GL_R8 和 GL_R8UI 在 OpenGL 中不同吗?

来自分类Dev

R:如何制作序列(1,1,1,2,3,3,3,4,5,5,5,6,7,7,7,8)

来自分类Dev

R:如何制作序列(1,1,1,2,3,3,3,4,5,5,5,6,7,7,7,8)

来自分类Dev

SQL“ SELECT * FROM table GROUP BY c1,c2”的R等效项是什么?

来自分类Dev

Android Studio 4.0.0 Java 8库在D8和R8构建错误

Related 相关文章

  1. 1

    K&R练习1-8改进

  2. 2

    nppiCopyConstBorder_8u_C1R中的性能下降

  3. 3

    这是什么文件SametimeTable_1(8GB)

  4. 4

    将 R8G8B8A8 映像复制到 R8G8B8

  5. 5

    R`dplyr`代码:`iris%>%dim(。)[1]`是什么意思?

  6. 6

    “R”的目的是什么?

  7. 7

    如果二进制是0和1,为什么在二进制文件和程序中看到类似\ x8c \ x8e \ xfc \ r \ xc3 \ x8a的内容?

  8. 8

    cuda-memcheck报告nppiFilterGauss_8u_C1R超出范围

  9. 9

    在 R 中将默认 html 编码转换为 UTF-8 或 latin1

  10. 10

    R 反应元素:在通用 id 中使用“i”(对于 1:8 中的 i)

  11. 11

    R 错误:1:输入的 UTF-8 不正确,请指出编码!XML到列表

  12. 12

    如何重复序列:r中的1,2,3,4,5,6,1,2,3,4,5,6,7,8,9,10,7,8,9,10

  13. 13

    表面格式为B8G8R8A8_UNORM,但vkCmdClearColorImage是否为float?

  14. 14

    表面格式为B8G8R8A8_UNORM,但vkCmdClearColorImage是否为float?

  15. 15

    当后缓冲区格式为DXGI_FORMAT_B8G8R8A8_UNORM时,为什么像素着色器返回float4?

  16. 16

    R的UTF-8编码问题

  17. 17

    如何让R维护utf8编码?

  18. 18

    禁用特定口味的R8

  19. 19

    R8缩小:多次定义类型

  20. 20

    R在8行之后添加空行

  21. 21

    R中的“ {”类是什么?

  22. 22

    R中的NearZeroVar是什么?

  23. 23

    那些“ .g> .r> a”是什么

  24. 24

    WebStorm中的^ R是什么

  25. 25

    GL_R8 和 GL_R8UI 在 OpenGL 中不同吗?

  26. 26

    R:如何制作序列(1,1,1,2,3,3,3,4,5,5,5,6,7,7,7,8)

  27. 27

    R:如何制作序列(1,1,1,2,3,3,3,4,5,5,5,6,7,7,7,8)

  28. 28

    SQL“ SELECT * FROM table GROUP BY c1,c2”的R等效项是什么?

  29. 29

    Android Studio 4.0.0 Java 8库在D8和R8构建错误

热门标签

归档