Size: a a a

pro.graphon (and gamedev)

2021 June 24

A

Arelav in pro.graphon (and gamedev)
Ну он выше написал что ему a,b == b,a не нравится, а потом написал так как будто это хор исправляется. Поэтому нет
источник

AT

Anatoly Tomilov in pro.graphon (and gamedev)
для asuint(v.x) ^ asuint(v.y) ^ asuint(v.z) не так уж и страшно (конечно как решение задачки, а не для прода)
источник

D

Deathwish in pro.graphon (and gamedev)
Ребят, по floating point есть статьи, литра или примеры как округлять значение своей функции, чтобы примерно соответствовало ieee стандарту? Ну как мы помним, с увеличением числа знаков перед запятой, точность float сильно падает. Однако, например функции в cmath библиотеке, определённой в стандарте с++ этому не подвержены, то-есть неважно какое число туда вы подаёте как аргумент, результат всегда будет корректный. Вопрос почему и как такое решается, когда пишем свои реализации.
источник

A

Arelav in pro.graphon (and gamedev)
Во первых не пишем свою библиотеку си.
Во вторых почему не подвержены? Можно пруф?
источник

A

Arelav in pro.graphon (and gamedev)
Точность флоатов относительная, поэтому я не до конца понимаю что ты хочешь и хотел бы понять
источник

K

Kirill in pro.graphon (and gamedev)
В смысле не сходится?
источник

D

Deathwish in pro.graphon (and gamedev)
Ну смотри, банальный пример
источник

D

Deathwish in pro.graphon (and gamedev)
Код из doom3
источник

D

Deathwish in pro.graphon (and gamedev)
float Sin16(float a) {
 float s;

 if ((a < 0.0f) || (a >= TWO_PI)) {
   a -= floorf(a / TWO_PI) * TWO_PI;
 }
#if 1
 if (a < PI) {
   if (a > HALF_PI) {
     a = PI - a;
   }
 }
 else {
   if (a > PI + HALF_PI) {
     a = a - TWO_PI;
   }
   else {
     a = PI - a;
   }
 }
#else
 a = PI - a;
 if (fabs(a) >= HALF_PI) {
   a = ((a < 0.0f) ? -PI : PI) - a;
 }
#endif
 s = a * a;
 return a * (((((-2.39e-08f * s + 2.7526e-06f) * s - 1.98409e-04f) * s + 8.3333315e-03f) * s - 1.666666664e-01f) * s + 1.0f);
}
источник

D

Deathwish in pro.graphon (and gamedev)
На самом деле у него точность тянет вполне себе даже на float, а не на половину
источник

D

Deathwish in pro.graphon (and gamedev)
Но, из-за ошибок округления, при больших значениях, например 10000, результат становится некорректным
источник

D

Deathwish in pro.graphon (and gamedev)
А теперь возьми простую функцию из библиотеки cmath sinf и вбей туда 10000, результат будет корректный
источник

A

Arelav in pro.graphon (and gamedev)
Ну офигеть наверно потому что там корректный но более медленный алгоритм
источник

A

Arelav in pro.graphon (and gamedev)
Возьми и прочитай
источник

D

Deathwish in pro.graphon (and gamedev)
Ну вот и найди
источник

D

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

A

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

ДЦ

Дмитро Цимбалюк... in pro.graphon (and gamedev)
ну у меня 2000 вершин, и должно быть 2000 нормалей
источник

K

Kirill in pro.graphon (and gamedev)
Экспортер тебе сам всё порубил на треугольники, ты не можешь заранее знать их точное количество
источник

K

Kirill in pro.graphon (and gamedev)
Нормаль - она к треугольнику, а не к вершине
источник