Почему арифметические функции GLSL дают на iPad такие разные результаты, как на симуляторе?

В настоящее время я преследую некоторые ошибки в моем фрагментном шейдерном коде OpenGL ES 2.0, который работает на устройствах iOS. Код прекрасно работает в симуляторе, но на iPad у него огромные проблемы, и некоторые вычисления дают совершенно разные результаты, например, у меня были0.0 на iPad и4013.17 на симуляторе, поэтому я не говорю о небольших различиях, которые могут быть результатом некоторых ошибок округления.

Одна из вещей, которые я заметил, это то, что на iPad

float1 = pow(float2, 2.0);

может дать результаты, которые сильно отличаются от результатов

float1 = float2 * float2;

В частности, при использованииpow(x, 2.0) на переменную, содержащую большее отрицательное число, такое как-8казалось, что он возвращает значение, которое удовлетворяло условиюif (powResult <= 0.0).

Также результат обеих операций (pow(x, 2.0) так же какx*x) дает другие результаты в симуляторе, чем на iPad.

Используются поплавкиmediumpно я получаю то же самое сhighp.

Is there a simple explanation for those differences?

Я сужаю проблему, но это занимает так много времени, так что, возможно, кто-то может помочь мне с простым объяснением.

Ответы на вопрос(3)

Ваш ответ на вопрос