fmod是否等同于HLSL中的%运算符

时间:2012-10-24 14:08:53

标签: floating-point operator-keyword hlsl modulus

以下声明是有效的HLSL:

float3(300.0f,200.0f,100.0f) % 256.0f

显然te%运算符适用于浮点数?与 fmod 有什么不同? 以下陈述是等效的吗?

fmod(float3(300.0f,200.0f,100.0f), 256.0f)

由于

2 个答案:

答案 0 :(得分:1)

我相信,是的。 %运算符记录为here,并定义为处理浮点数和整数。

答案 1 :(得分:0)

我不确定它们是完全相同的,但请不要引用我的信息。 这是我的测试:

const float2 r = float2(
23.1406926327792690,  // e^pi (Gelfond's constant)
2.6651441426902251); // 2^sqrt(2) (Gelfond–Schneider constant)

return frac( cos( fmod( 12345678., 1e-7 + 256. * dot(p,r) ) ) );  

//return frac( cos( 12345678.% (1e-7 + 256. * dot(p,r)) ) );  

第二个版本在映射为纹理时返回视觉模式,而第一个版本看起来纯粹是随机的。 也许我误解了一些事情,但在这种情况下,他们似乎肯定采取了不同的行动。

也许我只是考虑了这个测试,但我认为我会提到它,因为它看似相关。

编辑:此代码源自此处 Can I generate a random number inside a pixel shader?似乎。{/ p>