Ati-GLSL Shader floating point arithmetic question

Discussion created by Sachbearbeiter on Apr 30, 2009
3 different ways to write an equation and only one works, why?

In a glsl shader code for explicit time integration for the euler equations the equation


occurs. There cxl and crx are both vec4 and ulf, urf and dx are floats. The test example is a rising heat bubble. Now there are at least four ways to write the equation above:

1. Fx=(cxl*ulf-cxr*urf)/dx;

2. Fx=cxl*(ulf/dx)-cxr*(urf/dx);

3. Fx=(cxl/dx)*ulf-(cxr/dx)*urf;

4. Fx=cxl*ulf/dx-cxr*urf/dx;

only the last one (4.) gives the correct result and the bubble stays symmetric, all the others make unsymetric errors.

anyone has an idea why that?