Dlaczego funkcje arytmetyczne GLSL dają tak różne wyniki na iPadzie niż na symulatorze?

Aktualnie ścigam niektóre błędy w moim kodzie shaderów fragmentu OpenGL ES 2.0, który działa na urządzeniach z systemem iOS. Kod działa dobrze w symulatorze, ale na iPadzie ma ogromne problemy, a niektóre obliczenia dają bardzo różne wyniki, miałem na przykład0.0 na iPadzie i4013.17 na symulatorze, więc nie mówię o małych różnicach, które mogą być wynikiem błędów zaokrąglania.

Jedną z rzeczy, które zauważyłem, jest to, że na iPadzie

float1 = pow(float2, 2.0);

może dać wyniki, które bardzo różnią się od wyników

float1 = float2 * float2;

W szczególności podczas używaniapow(x, 2.0) na zmiennej zawierającej większą liczbę ujemną jak-8, wydawało się, że zwraca wartość, która spełniła warunekif (powResult <= 0.0).

Również wynik obu operacji (pow(x, 2.0) jak równieżx*x) daje różne wyniki w symulatorze niż na iPadzie.

Używane pływaki sąmediump, ale dostaję te same rzeczyhighp.

Czy istnieje proste wyjaśnienie tych różnic?

Zawężam problem, ale zajmuje to dużo czasu, więc może ktoś może mi pomóc tutaj z prostym wyjaśnieniem.

questionAnswers(3)

yourAnswerToTheQuestion