美文网首页
[GLSL] 整数除法误差

[GLSL] 整数除法误差

作者: Cocoonshu | 来源:发表于2017-09-27 18:11 被阅读253次

背景

GL版本: OpenGL ES 2.0
代码端: Shader GLSL

前言

当你遇到下面这种情况时,人生,可能是绝望的~

int   slot    = ...; // 网格序号,如90
float colSize = ...; // 网格列数,如30.0
float rowSize = ...; // 网格行数,如4.0
int   column  = int(mod(float(slot), colSize));
int   row     = int(float(slot) / colSize);

// 此时,神奇的事情发生了
// column = 30;
// row    = 2;
你特么在逗我吗!??

正片

除法除不对就算了,取余也取不对?
好吧,咱一个一个来

除法·改

因为GLSL中不支持隐式类型转换,所以只能同种类型做运算,如float / float或者int / int

// Plan A
int row = slot / int(colSize);
// 结果是: 2
// Plan B
float row = float(slot) / colSize;
// 结果是: 2.0
What...What the hell?
取余·改
// Plan A
int column = int(float(slot) - colSize * floor(float(slot) / colSize));
// 结果是: 30
// Plan A
int column = slot - int(colSize) * (slot / int(colSize));
// 结果是: 30

那么不奇怪了,除法都出问题了,取余这么改当时也没用了~


片尾

先不公布我的解决方案,先看看能不能等到大家的想法和尝试~= ̄ω ̄=

相关文章

  • [GLSL] 整数除法误差

    背景 GL版本: OpenGL ES 2.0代码端: Shader GLSL 前言 当你遇到下面这种情况时,人生,...

  • java 整数取余

    java整数取余是建立在java整数除法的基础上的,java整数除法可以参考我的上一篇文章java 整数除法。 这...

  • Python学习笔记(二)几种除法的比较

    传统除法(' /')、真除法、floor除法(' // ') ·传统除法和真除法:在Python2.7之前,对整数...

  • 北大版五年级上册数学第一单元知识点

    第一单元《小数除法》知识 01 小数除以整数 除数是整数的小数除法,按照整数除法的法则去除,商的小数点要和被除数的...

  • c语言中负数除法和右移的区别

    对于无符号整数,除法和右移效果是一样的;对于有符号的正整数,除法和右移的效果也是一样的;对于有符号的负整数,除法和...

  • 今天一些问题

    1. python 除法 Python 3.x在整数除法中,除法(/)总是返回一个浮点数,如果只想得到整数的结果,...

  • 小数除法

    小数除法其实也就是整数除法,对我而言是这样,本身是7.4➗2如果是整数除法的话,那 ,就是74÷2,那么下面,我...

  • Java程序基础--整数运算

    整数运算即使是除法运算,也是精确的,两个整数相除只能得到结果的整数部分。 求余运算用% 注意:整数的除法对于除数为...

  • 小数除法

    小数除法其实也就是整数除法,对我而言是这样,本身是7.4➗2如果是整数除法的话,那 就是74÷2,那么下面,我举...

  • java 整数除法

    java整数除法看似简单,但是仔细考虑就会发现一些细节并不是显而易见的。例如,-9/4结果是-2还是-3? 查阅了...

网友评论

      本文标题:[GLSL] 整数除法误差

      本文链接:https://www.haomeiwen.com/subject/aqzuextx.html