在HLSL中,fmod函数是否相当于%运算符?

4
以下语句是有效的HLSL代码:
float3(300.0f,200.0f,100.0f) % 256.0f

显然,%运算符适用于浮点数?那与fmod有何不同? 以下语句是否等效?

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

谢谢


在每个位置上都尝试正负参数。 - user207421
2个回答

2

我确实这么认为。% 运算符在这里有详细说明,并且已定义为可以对浮点数和整数进行操作。


1
然而,它说“%运算符仅在两侧均为正或两侧均为负的情况下定义。”据我所见,“fmod”函数没有这样的限制。 - Claude

-1

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

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?

一只燕子不代表夏天的到来,一个测试也不能证明问题的正确性。你需要至少四个测试,覆盖所有可能的正负参数组合。 - user207421
好的,我只是想提出一个有趣的观点,而不是表达一个观点。 - twobob
@Michaelangel007 我记得我没有从那里获取,而是从一些随机的XNA地方获取的,可能是从那里获取的。但随时都可以随便指责我剽窃。 哦,你这样做了。 - twobob
我已经添加了你的链接。你的荣誉现在是安全的。 请不要再指责我抄袭。 正如我所说,那并不是事实。 7年过去了,很明显我不是为了信誉而在这里。 - twobob

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接