相关疑难解决方法(0)

使用按位运算符和布尔逻辑的绝对值 abs(x)

这是如何运作的?

这个想法是abs(x)对整数使用按位运算符(假设为 32 位字):

y = x >> 31
(x + y) ^ y // This gives abs(x) (is ^ XOR)?
Run Code Online (Sandbox Code Playgroud)

c c++ bit-manipulation absolute-value language-lawyer

52
推荐指数
3
解决办法
9802
查看次数

着色器优化:三元运算符是否等同于分支?

我正在研究一个顶点着色器,我想要有条件地删除一些顶点:

float visible = texture(VisibleTexture, index).x;
if (visible > threshold)
    gl_Vertex.z = 9999; // send out of frustum
Run Code Online (Sandbox Code Playgroud)

我知道当相邻数据之间几乎没有共性时,分支会破坏性能.在这种情况下,每个其他顶点可能会得到一个不同的"可见"值,这对于本地着色器核心集群的性能(从我的理解)来说是不利的.

我的问题:三元运算符是否更好(无论可读性问题)?

float visible = texture(VisibleTexture, index).x;
gl_Vertex.z = (visible > threshold) ? 9999 : gl_Vertex.z;
Run Code Online (Sandbox Code Playgroud)

如果没有,是否将其转换为有价值的计算?

float visible = texture(VisibleTexture, index).x;
visible = sign(visible - threshold) * .5 + .5; // 1=visible, 0=invisible
gl_Vertex.z += 9999 * visible; // original value only for visible
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来放弃顶点而不依赖于几何着色器?

在此先感谢您的帮助!

graphics optimization shader

27
推荐指数
3
解决办法
2万
查看次数

数字的绝对值

我想通过bash中的以下代码取一个数字的绝对值:

#!/bin/bash
echo "Enter the first file name: "
read first

echo "Enter the second file name: "
read second

s1=$(stat --format=%s "$first")
s2=$(stat -c '%s' "$second")

res= expr $s2 - $s1

if [ "$res" -lt 0 ]
then
        res=$res \* -1
fi

echo $res
Run Code Online (Sandbox Code Playgroud)

现在我遇到的问题是在if语句中,无论我改变什么,它总是在if中,我试图放置[[ ]]声明但没有.

这是错误:

./p6.sh: line 13: [: : integer expression expected
Run Code Online (Sandbox Code Playgroud)

unix bash shell

15
推荐指数
3
解决办法
3万
查看次数

使用数学施加数值限制

我想返回一个不超过我设定限制的数字.例如,我想做相当于:

if (number >= limit)
    number = limit;
return number;
Run Code Online (Sandbox Code Playgroud)

是否有一种数学方法可以完全相同于我刚才描述的一行?

java algorithm

2
推荐指数
1
解决办法
78
查看次数