mod(2048,10)的结果为8
mod(2049.0,10.0)的结果为9.0
mod(249,10)的结果为9
mod(2049,1)的结果为0,正确。
mod(2049,2)的结果为0,而不是1,奇怪之处!!!!!!!!!!!
mod(2049,3)的结果为0,正确。
mod(2049,4)的结果为2,而不是1,奇怪之处!!!!!!!!!!!
mod(2049,5)的结果为0,而不是4,奇怪之处!!!!!!!!!!!
mod(2049,6)的结果为4,而不是3,奇怪之处!!!!!!!!!!!
mod(2049,7)的结果为6,而不是5,奇怪之处!!!!!!!!!!!
mod(2049,8)的结果为2,而不是1,奇怪之处!!!!!!!!!!!
mod(2049,9)的结果为7,而不是6,奇怪之处!!!!!!!!!!!
mod(2049,10)的结果为0,而不是9,奇怪之处!!!!!!!!!!
只要能被2049整除的都没问题,不能整除的为正确余数加1,增加的数值不小于除数的调整为0
上述奇怪之处改为如下形式就恢复正常了:
mod(2049.0,8.0)结果为1.0
mod的定义是这样的:
genType mod( genType x,
float y);
genType mod( genType x,
genType y);
genDType mod( genDType x,
double y);
genDType mod( genDType x,
genDType y);
genType指的是float, vec2, vec3, or vec4
genDType指的是double, dvec2, dvec3, or dvec4
mod是没有整型参数的,因为没有genIType(int, ivec2, ivec3, or ivec4)。所以就可能造成结果异常。
mod的实现原理为:
x - y * floor(x/y)
在GLSL中,发现mod函数对于某些整数操作产生非预期结果,例如mod(2049, 2)返回0而非1。问题源于GLSL的mod不接受整型参数,只接受浮点类型,导致结果有时会加1但不小于除数时调整为0。修正此问题的方法是将所有参数转换为浮点类型,如mod(2049.0, 2.0)。"
107605399,9807201,IntelliJ IDEA Debug 深度解析,"['IntelliJ IDEA', '调试工具', '开发技巧', 'Java开发']
2万+

被折叠的 条评论
为什么被折叠?



