Why GPU (cgminer) scrypt mining generates so many false-positive nonces? I understand that GPU might have less accurate results of real numbers because speed/performance is the target. But I don't understand why it also occurred in integer numbers.

Taking mining algorithm, scrypt hashing, for example, there are almost integer operations in SHA-256 or PBKDF, such as unsigned integer rotate, shift, add, xor, and bit-select operators. However, it does generate so many false-positive nonces. Everyone can invoke cgminer with arguments -T -D --verbose to see the detail logs. However, cgminer will verify the result via CPU routine again before sending it to mining pool because too many invalid share cgminer will be banned from the pool. Not everyone knows their GPU generates so many false-positive shares because the default log message does not show this.

So, I don't understand that. Is the problem in GPU or in the scrypt OpenCL code?
It's likely your intensity is too high. Usually higher intensity or other settings may look good with higher hashing power, but in truth results in a lot of false positives.

Playing around with the settings till you get the sweet spot is the best practice.