I'm perusing the OpenCL spec as a source of information regarding modern floating point math specifications. In section 7.4, there is a table (table 7.1) listing the minimum accuracy required of various math functions in the OpenCL API. Each function has a required ULP which must be obeyed.
My question: Where do the ULP values come from? For example, the table calls out that exp(x) must be accurate to within 3 ULPs of the mathematically correct result. Fair enough, but what information was used to create the spec of 3 ULPs? I'm looking for pointers to the literature, estimates based on the "best" implementation of the function, or other considerations which led to this spec.