GLSL sign()函数是否会导致分支以及它是如何工作的?

Tho*_*mas 4 glsl

似乎某些具有输出的函数可能使用if语句作为底层实现,从而导致分支.我不认为它,但我想知道.

对于符号(x),如果数字为正数,负数或零,则分别重新运行1,-1和0.

那么这个功能如何运作?

der*_*ass 8

实施细节始终是特定于实现的.因此,如何实现此构造完全取决于供应商(以及最终,底层硬件的能力).

但是,任何现实世界的实现都不太可能使用分支进行操作sign().通过查看大多数现实世界浮点格式中存在的符号位,可以轻松确定符号,尤其是IEE 754.这可以通过逻辑轻松实现 - 与典型的浮点运算功能相比更容易实现.

  • 我不认为sign是使用分支实现的...但是逻辑并不像获取符号位那么简单,因为当值为0.0时sign函数返回0.0(因此需要测试零);如果该值不为零,则只能使用符号位。这意味着必须使用 IEEE 浮点的所有位来确定结果。 (2认同)