Size: a a a

pro.graphon (and gamedev)

2021 April 18

DP

Defragmented Panda in pro.graphon (and gamedev)
Помогите пожалуйста получить ошибку точности. Я хочу понять как она работает

lowp float res;
lowp float eps=1.0/1024.0;
 if(y<100.0){
  res=x;res=res*eps;
 }else{
  res=eps;res=res*x;
  }

x меняется от 1.0 до 512.0
если я правильно понимаю то этот код должен приводить к ошибке точности из-за разного порядка действий, так? если нет, то что добавить чтобы увидеть ошибку?

lowp должен быть от 1\1024 до 2 примерно
источник

d

disba1ancer in pro.graphon (and gamedev)
это шейдер?
источник

DP

Defragmented Panda in pro.graphon (and gamedev)
да. фрагментный
источник

d

disba1ancer in pro.graphon (and gamedev)
может компилятор без тебя как-то меняет порядок действий и как бы ты в коде не ставил, результат всегда один и тот же
источник

d

disba1ancer in pro.graphon (and gamedev)
хотя судя по коду не думаю что должен
источник

VK

Vitaliy ◀️TriΔng3l▶️... in pro.graphon (and gamedev)
lowp fixed-point, шаг, вроде, 1/256
источник

VK

Vitaliy ◀️TriΔng3l▶️... in pro.graphon (and gamedev)
x = 512.0;
res = x;
Больше 2 (или около того) в res не влезет
источник

VK

Vitaliy ◀️TriΔng3l▶️... in pro.graphon (and gamedev)
lowp это от 2.8, насколько я помню, там, где lowp есть вообще
источник

VK

Vitaliy ◀️TriΔng3l▶️... in pro.graphon (and gamedev)
Заодно это, да. Склеил присваивание и умножение. Тут же не вулкановское precise
источник

DP

Defragmented Panda in pro.graphon (and gamedev)
есть идеи кода который выдаст разный результат из-за ошибки точности?

т.е. 2 примера которые в идеальной математике равны, но на реальном гпу не равны
источник

VK

Vitaliy ◀️TriΔng3l▶️... in pro.graphon (and gamedev)
Да хоть на CPU, (маленькое - маленькое + большое - большое) или (маленькое + большое - большое - маленькое)
источник

DP

Defragmented Panda in pro.graphon (and gamedev)
мне интересно для ситуации где exponent не меняется, как в lowp

т.е. ошибки округления и переполнения
источник

VK

Vitaliy ◀️TriΔng3l▶️... in pro.graphon (and gamedev)
Первое будет 0, второе, очень вероятно, минус чуть-чуть (в маленькое+большое выровняется экспонента, надо будет откинуть биты мантиссы и округлить)
источник

DP

Defragmented Panda in pro.graphon (and gamedev)
источник

DP

Defragmented Panda in pro.graphon (and gamedev)
возможно это полезно будет
источник

VK

Vitaliy ◀️TriΔng3l▶️... in pro.graphon (and gamedev)
uint8_t i = 255;
i = add_sat(i, uint8_t(1));
источник

DP

Defragmented Panda in pro.graphon (and gamedev)
но для гпу, там такого по-моему нет )
источник

VK

Vitaliy ◀️TriΔng3l▶️... in pro.graphon (and gamedev)
А большая разница, 8.0 или 2.8? :)
источник

VK

Vitaliy ◀️TriΔng3l▶️... in pro.graphon (and gamedev)
Сложение двух fixed-point, естественно, только переполнение может вызвать
источник

VK

Vitaliy ◀️TriΔng3l▶️... in pro.graphon (and gamedev)
А вот умножение это 2.8 * 2.8 = 4.16, которое надо впихнуть в 2.8, тут уже будет округление
источник