These are using double precision values for 0.28, 2.8 and 300. Double precision is only enabled if the cl_khr_fp64 extension is supported by the implementation and including a #pragma cl_khr_fp64 : enable in your kernel source. The change you made to append “f” or cast to a float was the right thing to do. On HW that does support double precision, you would have called a double precision pow which may be slower than single precision pow.