Сравнение поплавков на языке Metal Shading - PullRequest
0 голосов
/ 30 июня 2018

Есть ли более простой способ сравнения двух чисел на языке металлического шейдинга?

В настоящее время я умножаю на 1000, затем преобразую в целое число, чтобы получить целочисленное сравнение.

int r = (int)(color.r * 1000);
int checkColorR = (int)(50.0/255.0 * 1000);
if (r == checkColorR) ...

Я ищу что-то вроде: Mathf. Приблизительно в Unity

1 Ответ

0 голосов
/ 30 июня 2018

Обычный метод - это сравнение абсолютной разности с желаемой точностью:

if (fabs(color.r - 50.0/255.0) < 1.0/1000.0) ...

Конечно, вы можете определить функцию для этого, а не повторять ее повсеместно.

Ваш текущий метод плох, потому что он выполняет целочисленное усечение. Эти два значения могут быть очень близки, но по обе стороны от целого числа, и они будут сравниваться как не равные, потому что одно будет усечено до целого числа ниже. Например, 4,9999 и 5,0001.

...