Por que as funções aritméticas do GLSL produzem resultados tão diferentes no iPad do que no simulador?

Atualmente estou perseguindo alguns bugs no meu código de shader de fragmento OpenGL ES 2.0 que está sendo executado em dispositivos iOS. O código corre bem no simulador, mas no iPad tem enormes problemas e alguns dos cálculos produzem resultados muito diferentes, eu tive, por exemplo0.0 no iPad e4013.17 no simulador, então não estou falando de pequenas diferenças que poderiam ser o resultado de alguns erros de arredondamento.

Uma das coisas que notei é que, no iPad,

float1 = pow(float2, 2.0);

pode produzir resultados muito diferentes dos resultados de

float1 = float2 * float2;

Especificamente, ao usarpow(x, 2.0) em uma variável contendo um número negativo maior como-8, parecia retornar um valor que satifecia a condiçãoif (powResult <= 0.0).

Além disso, o resultado de ambas as operações (pow(x, 2.0) assim comox*x) produz resultados diferentes no simulador do que no iPad.

Flats usados ​​sãomediump, mas eu recebo o mesmo materialhighp.

Existe uma explicação simples para essas diferenças?

Estou diminuindo o problema, mas leva muito tempo, então talvez alguém possa me ajudar aqui com uma explicação simples.

questionAnswers(3)

yourAnswerToTheQuestion