/
redgpu
/
ispc
Обзор
Документация
Войти
/
redgpu
/
ispc
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
tests/func-tests/fmod-float-uniform.ispc
89 строк
3 KB
Arina Neshlyaeva
Do not use rcp in fmod tests to decrease stack usage
23 сен 2024, 06:32
23 сен 2024, 06:32
35efcf9
Код
Авторство
О чём код?
#include "test_static.isph" task void f_f(uniform float RET[], uniform float aFOO[]) { RET[programIndex] = 0; // Case 1: x and y are generic positive values uniform float x = aFOO[programCount / 2]; uniform float y = 0.8; uniform float testVal = fmod(x, y); uniform float baseRes = x - trunc(x / y) * y; RET[programIndex] += ((abs(baseRes - testVal) < 1e-6) || abs((baseRes-testVal)/baseRes) < 1e-5) ? 0 : 1; // Case 2: x is negative, y is positive x = -aFOO[programCount / 2]; y = 0.8; testVal = fmod(x, y); baseRes = x - trunc(x / y) * y; RET[programIndex] += ((abs(baseRes - testVal) < 1e-6) || abs((baseRes-testVal)/baseRes) < 1e-5) ? 0 : 1; // Case 3: x is positive, y is negative x = aFOO[programCount / 2]; y = -0.8; testVal = fmod(x, y); baseRes = x - trunc(x / y) * y; RET[programIndex] += ((abs(baseRes - testVal) < 1e-6) || abs((baseRes-testVal)/baseRes) < 1e-5) ? 0 : 1; // Case 4: x and y are negative x = -aFOO[programCount / 2]; y = -0.8; testVal = fmod(x, y); baseRes = x - trunc(x / y) * y; RET[programIndex] += ((abs(baseRes - testVal) < 1e-6) || abs((baseRes-testVal)/baseRes) < 1e-5) ? 0 : 1; // Case 5.1: x is +inf, y is positive x = aFOO[programCount / 2] / 0.0; y = 0.8; testVal = fmod(x, y); RET[programIndex] += (isnan(testVal) && (signbits(testVal) == signbits(x))) ? 0 : 1; // Case 5.2: x is -inf, y is positive x = -aFOO[programCount / 2] / 0.0; y = 0.8; testVal = fmod(x, y); RET[programIndex] += (isnan(testVal) && (signbits(testVal) == signbits(x))) ? 0 : 1; // Case 6: x is positive, y is 0.0 x = aFOO[programCount / 2]; y = 0.0; testVal = fmod(x, y); RET[programIndex] += (isnan(testVal) && (signbits(testVal) == signbits(x))) ? 0 : 1; // Case 7.1: x is positive, y is inf x = aFOO[programCount / 2]; y = 0.8 / 0.0; testVal = fmod(x, y); RET[programIndex] += (testVal == x) ? 0 : 1; // Case 7.1: x is negative, y is inf x = -aFOO[programCount / 2]; y = 0.8 / 0.0; testVal = fmod(x, y); RET[programIndex] += (testVal == x) ? 0 : 1; // Case 8.1: x is +0.0, y is positive x = 0.0; y = 0.8; testVal = fmod(x, y); RET[programIndex] += (testVal == x) ? 0 : 1; // Case 8.2: x is -0.0, y is positive x = -0.0; y = 0.8; testVal = fmod(x, y); RET[programIndex] += (testVal == x) ? 0 : 1; // Case 9.1: x is +0.0, y is 0.0 x = 0.0; y = 0.0; testVal = fmod(x, y); RET[programIndex] += (isnan(testVal) && (signbits(testVal) == signbits(x))) ? 0 : 1; // Case 9.2: x is -0.0, y is 0.0 x = -0.0; y = 0.0; testVal = fmod(x, y); RET[programIndex] += (isnan(testVal) && (signbits(testVal) == signbits(x))) ? 0 : 1; } task void result(uniform float RET[]) { RET[0] = 0; }